Jelajahi Sumber

core: added sctp callbacks api

- functions needed in core - callbacks to be set by sctp module
Daniel-Constantin Mierla 12 tahun lalu
induk
melakukan
66e90f9888
2 mengubah file dengan 82 tambahan dan 7 penghapusan
  1. 60 7
      sctp_core.c
  2. 22 0
      sctp_core.h

+ 60 - 7
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;
 }

+ 22 - 0
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