[sr-dev] git:master: core: added sctp callbacks api

Daniel-Constantin Mierla miconda at gmail.com
Sat May 25 17:29:06 CEST 2013


Module: sip-router
Branch: master
Commit: 66e90f9888daefdb92dcebd28e188ce7f912a4f9
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=66e90f9888daefdb92dcebd28e188ce7f912a4f9

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at 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




More information about the sr-dev mailing list