summaryrefslogtreecommitdiffstats
path: root/PICA_client.c
diff options
context:
space:
mode:
authorAnton <anton@picapica>2016-12-24 22:56:45 +0400
committerAnton <anton@picapica>2016-12-24 22:56:45 +0400
commita991eb82decec01d25ac39805ee60e4fea196ef7 (patch)
treebe1b44456d8f1555f9099ab6cfad7024e32cc059 /PICA_client.c
parent13fee28314bbe2c6e2e59dd6451838ed1a944d6f (diff)
downloadpica-pica-a991eb82decec01d25ac39805ee60e4fea196ef7.tar.gz
pica-pica-a991eb82decec01d25ac39805ee60e4fea196ef7.zip
implementing process_directc2c(), work in progress
Diffstat (limited to 'PICA_client.c')
-rw-r--r--PICA_client.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/PICA_client.c b/PICA_client.c
index 6c86a35..fe82195 100644
--- a/PICA_client.c
+++ b/PICA_client.c
@@ -1987,6 +1987,45 @@ static int process_c2c(struct PICA_c2c *c2c, fd_set *rfds, fd_set *wfds)
return ret;
}
+static struct PICA_c2c * find_matching_c2c(struct PICA_c2n *c2n, struct PICA_directc2c *d)
+{
+ --
+}
+
+static void process_directc2c(struct PICA_c2n *c2n)
+{
+ //process accepted connections
+ if (c2n->directc2c_listener)
+ {
+ PICA_directc2c *d;
+ PICA_c2c *c2c;
+
+ d = c2n->directc2c_listener->accepted_connections;
+
+ while(d)
+ {
+ if (d->state == PICA_DIRECTC2C_STATE_ACTIVE)
+ {
+ if ((c2c = find_matching_c2c(c2n, d)))
+ {
+ if (c2c->direct)
+ PICA_close_directc2c(c2c->direct);
+
+ c2c->direct = d;
+ ...
+ }
+ else
+ {
+ --
+ }
+ }
+ d = d->next;
+ }
+ }
+ //process outgoing connections
+ --
+}
+
static void listener_add_connection(struct PICA_listener *lst, SOCKET *s)
{
struct PICA_directc2c *nc;
@@ -1997,6 +2036,7 @@ static void listener_add_connection(struct PICA_listener *lst, SOCKET *s)
nc->is_outgoing = PICA_DIRECTC2C_INCOMING;
nc->sck = s;
nc->ssl = SSL_new(lst->acc->ctx);
+ nc->state = PICA_DIRECTC2C_CONNSTATE_NEW;
SSL_set_fd(nc->ssl, nc->sck);
ret = SSL_accept(nc->ssl);
@@ -2018,6 +2058,8 @@ static void listener_add_connection(struct PICA_listener *lst, SOCKET *s)
}
}
+ nc->state = PICA_DIRECTC2C_CONNSTATE_WAITINGTLS;
+
nc->next = lst->accepted_connections;
lst->accepted_connections = nc;
@@ -2039,6 +2081,7 @@ static int process_listener_conn(struct PICA_directc2c *conn, fd_set *rfds, fd_s
if (!conn->peer_cert)
return PICA_ERRSSL;
+ conn->state = PICA_DIRECTC2C_CONNSTATE_ACTIVE;
return PICA_OK;
}
@@ -2241,6 +2284,12 @@ int PICA_event_loop(struct PICA_c2n **connections, int timeout)
kill_ptr = 0;
}
}
+
+ //processing direct c2c connections associated with current c2n
+ if ((*ic2n)->directc2c_config != PICA_DIRECTC2C_CFG_DISABLED)
+ {
+ process_directc2c(*ic2n);
+ }
}
ic2n++;
}