Module: sip-router Branch: master Commit: 66e90f9888daefdb92dcebd28e188ce7f912a4f9 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=66e90f98...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@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