summaryrefslogtreecommitdiff
path: root/pjlib-util/src/pjstun-srv-test/server.c
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-03-08 18:58:04 +0000
committerBenny Prijono <bennylp@teluu.com>2007-03-08 18:58:04 +0000
commit538cbe505fc2de5140ccc3910c88c6922bc8a2b9 (patch)
treeca5882d36b10f1c579590789b8912221c0031cb1 /pjlib-util/src/pjstun-srv-test/server.c
parentd48757a47b8cd228e1979ee843fc10aa8467a50e (diff)
A really initial implementation on STUN server
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1049 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib-util/src/pjstun-srv-test/server.c')
-rw-r--r--pjlib-util/src/pjstun-srv-test/server.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/pjlib-util/src/pjstun-srv-test/server.c b/pjlib-util/src/pjstun-srv-test/server.c
index b95b349e..5fdb233e 100644
--- a/pjlib-util/src/pjstun-srv-test/server.c
+++ b/pjlib-util/src/pjstun-srv-test/server.c
@@ -29,6 +29,9 @@ struct pj_stun_server
pj_bool_t thread_quit_flag;
pj_thread_t **threads;
+
+ unsigned usage_cnt;
+ pj_stun_usage *usage[32];
};
PJ_DEF(pj_status_t) pj_stun_perror( const char *sender,
@@ -109,10 +112,62 @@ PJ_DEF(pj_stun_server_info*) pj_stun_server_get_info(pj_stun_server *srv)
}
+pj_status_t pj_stun_server_register_usage(pj_stun_server *srv,
+ pj_stun_usage *usage)
+{
+ unsigned i;
+
+ for (i=0; i<PJ_ARRAY_SIZE(srv->usage); ++i) {
+ if (srv->usage[i] == usage)
+ return PJ_SUCCESS;
+ }
+
+ for (i=0; i<PJ_ARRAY_SIZE(srv->usage); ++i) {
+ if (srv->usage[i] == NULL)
+ break;
+ }
+
+ if (i == PJ_ARRAY_SIZE(srv->usage))
+ return PJ_ETOOMANY;
+
+ srv->usage[i] = usage;
+ ++srv->usage_cnt;
+
+ return PJ_SUCCESS;
+}
+
+pj_status_t pj_stun_server_unregister_usage(pj_stun_server *srv,
+ pj_stun_usage *usage)
+{
+ unsigned i;
+
+ for (i=0; i<PJ_ARRAY_SIZE(srv->usage); ++i) {
+ if (srv->usage[i] == usage)
+ break;
+ }
+
+ if (i != PJ_ARRAY_SIZE(srv->usage)) {
+ srv->usage[i] = NULL;
+ --srv->usage_cnt;
+ return PJ_SUCCESS;
+ }
+
+ return PJ_ENOTFOUND;
+}
+
+
PJ_DEF(pj_status_t) pj_stun_server_destroy(pj_stun_server *srv)
{
unsigned i;
+ for (i=0; i<PJ_ARRAY_SIZE(srv->usage); ++i) {
+ if (!srv->usage[i])
+ continue;
+
+ pj_stun_usage_destroy(srv->usage[i]);
+ pj_stun_server_unregister_usage(srv, srv->usage[i]);
+ }
+
srv->thread_quit_flag = PJ_TRUE;
for (i=0; i<srv->si.thread_cnt; ++i) {
pj_thread_join(srv->threads[i]);