Module: sip-router
Branch: master
Commit: 66e90f9888daefdb92dcebd28e188ce7f912a4f9
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=66e90f9…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Sat May 25 10:56:11 2013 +0200
core: added sctp callbacks api
- functions needed in core - callbacks to be set by sctp module
---
sctp_core.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
sctp_core.h | 22 +++++++++++++++++++
2 files changed, 82 insertions(+), 7 deletions(-)
diff --git a/sctp_core.c b/sctp_core.c
index 863d578..19ffda6 100644
--- a/sctp_core.c
+++ b/sctp_core.c
@@ -20,40 +20,93 @@
#include "sctp_core.h"
-int sctp_core_msg_send(struct dest_info* dst, char* buf, unsigned len)
+/**
+ *
+ */
+static sctp_srapi_t _sctp_srapi = { 0 };
+static int _sctp_srapi_set = 0;
+
+/**
+ *
+ */
+int sctp_core_init(void)
{
- return 0;
+ if(_sctp_srapi_set==0) {
+ LM_ERR("SCTP API not initialized\n");
+ return -1;
+ }
+
+ return _sctp_srapi.init();
}
+/**
+ *
+ */
void sctp_core_destroy(void)
{
}
+/**
+ *
+ */
int sctp_core_init_sock(struct socket_info* sock_info)
{
return 0;
}
-int sctp_core_rcv_loop(void)
+/**
+ *
+ */
+void sctp_core_init_options(void)
+{
+}
+
+/**
+ *
+ */
+int sctp_core_check_compiled_sockopts(char* buf, int size)
{
return 0;
}
-void sctp_core_init_options(void)
+/**
+ *
+ */
+int sctp_core_check_support(void)
{
+ return 0;
}
-int sctp_core_check_compiled_sockopts(char* buf, int size)
+/**
+ *
+ */
+int sctp_core_rcv_loop(void)
{
return 0;
}
-int sctp_core_check_support(void)
+/**
+ *
+ */
+int sctp_core_msg_send(struct dest_info* dst, char* buf, unsigned len)
{
return 0;
}
-int sctp_core_init(void)
+/**
+ *
+ */
+int sctp_core_register_api(sctp_srapi_t *api)
{
+ if(api==NULL || api->init==NULL) {
+ LM_ERR("invalid parameters\n");
+ return -1;
+ }
+ if(_sctp_srapi_set==1) {
+ LM_ERR("SCTP API already initialized\n");
+ return -1;
+ }
+ _sctp_srapi_set = 1;
+ memcpy(&_sctp_srapi, api, sizeof(sctp_srapi_t));
return 0;
}
diff --git a/sctp_core.h b/sctp_core.h
index 4e113c4..362dd38 100644
--- a/sctp_core.h
+++ b/sctp_core.h
@@ -24,19 +24,41 @@
#include "ip_addr.h"
int sctp_core_init(void);
+typedef int (*sctp_srapi_init_f)(void);
void sctp_core_destroy(void);
+typedef void (*sctp_srapi_destroy_f)(void);
int sctp_core_init_sock(struct socket_info* sock_info);
+typedef int (*sctp_srapi_init_sock_f)(struct socket_info* sock_info);
void sctp_core_init_options(void);
+typedef void (*sctp_srapi_init_options_f)(void);
int sctp_core_check_compiled_sockopts(char* buf, int size);
+typedef int (*sctp_srapi_check_compiled_sockopts_f)(char* buf, int size);
int sctp_core_check_support(void);
+typedef int (*sctp_srapi_check_support_f)(void);
int sctp_core_rcv_loop(void);
+typedef int (*sctp_srapi_rcv_loop_f)(void);
int sctp_core_msg_send(struct dest_info* dst, char* buf, unsigned len);
+typedef int (*sctp_srapi_msg_send_f)(struct dest_info* dst, char* buf,
+ unsigned len);
+
+typedef struct sctp_srapi {
+ sctp_srapi_init_f init;
+ sctp_srapi_destroy_f destroy;
+ sctp_srapi_init_sock_f init_sock;
+ sctp_srapi_init_options_f init_options;
+ sctp_srapi_check_compiled_sockopts_f check_compiled_sockopts;
+ sctp_srapi_check_support_f check_support;
+ sctp_srapi_rcv_loop_f rcv_loop;
+ sctp_srapi_msg_send_f msg_send;
+} sctp_srapi_t;
+
+int sctp_core_register_api(sctp_srapi_t *api);
#endif