catalinux / Conn (public) (License: LGPLv2) (since 2016-03-01) (hash sha1)
Net library for easy building ipv4/ipv6 network daemons/clients
List of commits:
Subject Hash Author Date (UTC)
Conn_type_* becomes CONN_TYPE_*. b284a20cc5430042cc662edc4d121c7f18cb3569 Catalin(ux) M. BOIE 2009-08-25 17:52:51
Improved status logging. 54fea00d8f16127244fd15b209c24f606adb20b3 Catalin(ux) M. BOIE 2009-08-25 17:33:14
Added Conn_strcasestr for case insensitive search in buffer. ca14b37b2a1f23887ad12fed729a3dd0ff253443 Catalin(ux) M. BOIE 2009-08-24 17:18:24
Improved ntime example. b63de9b82ffab1c0d759571a40f1d72f9b8df927 Catalin(ux) M. BOIE 2009-08-24 17:09:21
Removed unused includes. 8af81a4c311caa7d738000a5208d01d7620d1040 Catalin(ux) M. BOIE 2009-08-21 18:57:33
Improved blackhole example. 2fd7ff181a412f4ba060b0e89b97acdf89a8fb88 Catalin(ux) M. BOIE 2009-08-21 18:03:22
Fixed connections to outside. Still, it is a little mess there. 417ccd4a48508a810377676658d51c5103168472 Catalin(ux) M. BOIE 2009-08-21 17:42:37
addr and bind_addr are not pointers! Corrected them. e1deeb765500ee079802c2cd6543f9c9496d8f9b Catalin(ux) M. BOIE 2009-08-21 16:49:24
Exported _alloc and _commit functions. 9a3159e89eff020cfb75b9eec49a45a637a6da57 Catalin(ux) M. BOIE 2009-08-21 16:39:27
Added blackhole example. 8a7ac49b018ad65ba386f8a50725745127b4cbd2 Catalin(ux) M. BOIE 2009-08-21 15:54:55
TODO in/out. fdcfbf9e18ed5fbe0135b9aa702e09432fa71e93 Catalin(ux) M. BOIE 2009-08-21 15:53:05
First chunk of generic socket handling. b9a488ba615c4322b5d116a29919f11fd476b200 Catalin(ux) M. BOIE 2009-08-21 15:50:45
Added ntime example (returns CLOCK_REALTIME as fast as it can). e2fa318caf3e9aea09a853ab2b4af4b5a2cc8261 Catalin(ux) M. BOIE 2009-08-20 15:41:20
TODO ins and outs. 66a987be5d8e08ef6fe1ce0c056b8c3acd65bdb7 Catalin(ux) M. BOIE 2009-08-20 15:36:14
Cosmetic change. 5dab6539af2ca97f3f3f9b55e20be7d6f423829e Catalin(ux) M. BOIE 2009-08-20 15:34:01
Abort if current slot is in state FREE. It must not happen. 14dc9f444309cddd46996a47277cefe4eec77db5 Catalin(ux) M. BOIE 2009-08-20 15:33:31
Clean a slot only after we move it in the end. This fixes an infinite loop if last and first slots were both in state FREE. eecc6decaea6801235aa7a02d193782e1accc58f Catalin(ux) M. BOIE 2009-08-20 15:32:38
Cosmetic changes. c147533732f8b7b4bbe2725f04bcce0df0271c70 Catalin(ux) M. BOIE 2009-08-20 15:31:12
Call del_obj only if we have a valid file descriptor. 95c90269de0fa59a6ea69c2067827bbf57db16d5 Catalin(ux) M. BOIE 2009-08-20 15:29:42
Conn_enqueue returns now the number of bytes queued or -1. You should really check the error code. ab88f823936ad67ba08aa5fd7984ea735c6c7dd7 Catalin(ux) M. BOIE 2009-08-20 15:28:42
Commit b284a20cc5430042cc662edc4d121c7f18cb3569 - Conn_type_* becomes CONN_TYPE_*.
Signed-off-by: Catalin(ux) M. BOIE <catab@embedromix.ro>
Author: Catalin(ux) M. BOIE
Author date (UTC): 2009-08-25 17:52
Committer name: Catalin(ux) M. BOIE
Committer date (UTC): 2009-09-02 15:42
Parent(s): 54fea00d8f16127244fd15b209c24f606adb20b3
Signing key:
Tree: 21894377b8d835aa1bc4627601ea1d0d9bd19194
File Lines added Lines deleted
Conn.c 10 10
Conn_engine_core.c 4 4
Conn_engine_core.h 5 4
File Conn.c changed (mode: 100644) (index 615b446..60b95db)
... ... static void Conn_free_intern(struct Conn *C)
256 256
257 257 Conn_pending++; Conn_pending++;
258 258 } else { } else {
259 C->type = Conn_type_UNK;
259 C->type = CONN_TYPE_UNK;
260 260 C->state = CONN_STATE_FREE; C->state = CONN_STATE_FREE;
261 261
262 262 /* Allow connections */ /* Allow connections */
 
... ... struct Conn *Conn_alloc(void)
333 333 C = &Conns[Conn_no]; C = &Conns[Conn_no];
334 334 C->slot = Conn_no; C->slot = Conn_no;
335 335
336 C->type = Conn_type_UNK;
336 C->type = CONN_TYPE_UNK;
337 337 C->state = CONN_STATE_EMPTY; C->state = CONN_STATE_EMPTY;
338 338
339 339 if (C->ibuf_size < Conn_default_ibuf) { if (C->ibuf_size < Conn_default_ibuf) {
 
... ... int Conn_commit(struct Conn *C)
462 462 int first_state; int first_state;
463 463
464 464 /* Try to figure what kind of socket is: client or master */ /* Try to figure what kind of socket is: client or master */
465 if (C->type == Conn_type_UNK) {
465 if (C->type == CONN_TYPE_UNK) {
466 466 if (strlen(C->addr) > 0) { if (strlen(C->addr) > 0) {
467 C->type = Conn_type_CLIENT;
467 C->type = CONN_TYPE_P2P;
468 468 do_listen = 0; do_listen = 0;
469 469 do_connect = 1; do_connect = 1;
470 470 } else { } else {
471 C->type = Conn_type_MASTER;
471 C->type = CONN_TYPE_MASTER;
472 472 if (strlen(C->bind_addr) == 0) { if (strlen(C->bind_addr) == 0) {
473 473 switch (C->sock_domain) { switch (C->sock_domain) {
474 474 case PF_INET: case PF_INET:
 
... ... struct Conn *Conn_connect(const int domain, const int type, const char *addr,
697 697 if (!X) if (!X)
698 698 return NULL; return NULL;
699 699
700 X->type = Conn_type_CLIENT;
700 X->type = CONN_TYPE_P2P;
701 701 X->state = CONN_STATE_CONNECT_a; X->state = CONN_STATE_CONNECT_a;
702 702
703 703 Conn_set_socket_domain(X, domain); Conn_set_socket_domain(X, domain);
 
... ... static void Conn_accept(struct Conn *C)
777 777 break; break;
778 778 } }
779 779
780 X->type = Conn_type_CLIENT;
780 X->type = CONN_TYPE_P2P;
781 781 X->state = CONN_STATE_OPEN; X->state = CONN_STATE_OPEN;
782 782 X->via = C->id; X->via = C->id;
783 783 X->fd = fd; X->fd = fd;
 
... ... static void Conn_accept_allow(void)
816 816 Conn_accept_is_allowed); Conn_accept_is_allowed);
817 817
818 818 for (i = 0; i < Conn_no; i++) { for (i = 0; i < Conn_no; i++) {
819 if (Conns[i].type != Conn_type_MASTER)
819 if (Conns[i].type != CONN_TYPE_MASTER)
820 820 continue; continue;
821 821
822 822 if (Conn_accept_is_allowed == 0) if (Conn_accept_is_allowed == 0)
 
... ... static void Conn_trytoconnect(void)
898 898 __FUNCTION__, Conn_pending); __FUNCTION__, Conn_pending);
899 899
900 900 for (i = Conn_no - 1; i >= 0; i--) { for (i = Conn_no - 1; i >= 0; i--) {
901 if (Conns[i].type != Conn_type_CLIENT)
901 if (Conns[i].type != CONN_TYPE_P2P)
902 902 continue; continue;
903 903
904 904 if ((Conns[i].state == CONN_STATE_CONNECT_0) if ((Conns[i].state == CONN_STATE_CONNECT_0)
 
... ... static void Conn_poll_cb(struct Conn *C, int revents)
1185 1185 /* Second, test for error or input */ /* Second, test for error or input */
1186 1186 if ((revents & CONN_POLLIN) if ((revents & CONN_POLLIN)
1187 1187 && (Conn_ignore(C) == 0)) { && (Conn_ignore(C) == 0)) {
1188 if (C->type == Conn_type_MASTER) {
1188 if (C->type == CONN_TYPE_MASTER) {
1189 1189 /* C pointer can change under us in Conn_accept->Conn_grow */ /* C pointer can change under us in Conn_accept->Conn_grow */
1190 1190 slot = C->slot; slot = C->slot;
1191 1191 Conn_accept(C); Conn_accept(C);
File Conn_engine_core.c changed (mode: 100644) (index 2ab17ce..c6b82f9)
... ... char *Conn_protocol(const struct Conn *C)
375 375 static char *Conn_socktype(const struct Conn *C) static char *Conn_socktype(const struct Conn *C)
376 376 { {
377 377 switch (C->type) { switch (C->type) {
378 case Conn_type_MASTER: return "master";
379 case Conn_type_CLIENT: return "client";
380 case Conn_type_UNK: return "unk";
378 case CONN_TYPE_UNK: return "unk";
379 case CONN_TYPE_MASTER: return "master";
380 case CONN_TYPE_P2P: return "p2p";
381 381 default: return "?"; default: return "?";
382 382 } }
383 383 } }
 
... ... char *Conn_status(const unsigned int flags)
568 568 if (C->state == CONN_STATE_FREE) if (C->state == CONN_STATE_FREE)
569 569 continue; continue;
570 570
571 if (C->type == Conn_type_CLIENT) {
571 if (C->type == CONN_TYPE_P2P) {
572 572 bi += C->bi; bi += C->bi;
573 573 bo += C->bo; bo += C->bo;
574 574 dT += Conn_now.tv_sec - C->start; dT += Conn_now.tv_sec - C->start;
File Conn_engine_core.h changed (mode: 100644) (index 572e725..a4a673c)
28 28
29 29
30 30 /* type */ /* type */
31 #define Conn_type_MASTER 1
32 #define Conn_type_CLIENT 2
33 #define Conn_type_UNK 3
34
31 enum {
32 CONN_TYPE_UNK = 0,
33 CONN_TYPE_MASTER,
34 CONN_TYPE_P2P
35 };
35 36
36 37 /* state */ /* state */
37 38 enum { enum {
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/catalinux/Conn

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/catalinux/Conn

Clone this repository using git:
git clone git://git.rocketgit.com/user/catalinux/Conn

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main