Prechádzať zdrojové kódy

Fix fixup functions.

Carsten Bock 12 rokov pred
rodič
commit
b23a74a473
1 zmenil súbory, kde vykonal 53 pridanie a 8 odobranie
  1. 53 8
      modules/utils/utils.c

+ 53 - 8
modules/utils/utils.c

@@ -101,11 +101,11 @@ int utils_forward(struct sip_msg *msg, int id, int proto);
 
 
 /* Exported functions */
 /* Exported functions */
 static cmd_export_t cmds[] = {
 static cmd_export_t cmds[] = {
-    {"http_query", (cmd_function)w_http_query, 2, fixup_http_query,
-     fixup_free_http_query,
+    {"http_query", (cmd_function)w_http_query, 2, fixup_http_query_get,
+     fixup_free_http_query_get,
      REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE},
      REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE},
-    {"http_query", (cmd_function)w_http_query_post, 3, fixup_http_query,
-     fixup_free_http_query,
+    {"http_query", (cmd_function)w_http_query_post, 3, fixup_http_query_post,
+     fixup_free_http_query_post,
      REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE},
      REQUEST_ROUTE|ONREPLY_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE},
     {"xcap_auth_status", (cmd_function)xcap_auth_status, 2, fixup_pvar_pvar,
     {"xcap_auth_status", (cmd_function)xcap_auth_status, 2, fixup_pvar_pvar,
      fixup_free_pvar_pvar, REQUEST_ROUTE},
      fixup_free_pvar_pvar, REQUEST_ROUTE},
@@ -327,13 +327,13 @@ static void destroy(void)
  * Fix http_query params: url (string that may contain pvars) and
  * Fix http_query params: url (string that may contain pvars) and
  * result (writable pvar).
  * result (writable pvar).
  */
  */
-static int fixup_http_query(void** param, int param_no)
+static int fixup_http_query_get(void** param, int param_no)
 {
 {
     if (param_no == 1) {
     if (param_no == 1) {
 	return fixup_spve_null(param, 1);
 	return fixup_spve_null(param, 1);
     }
     }
 
 
-    if ((param_no == 2) || (param_no == 3)) {
+    if (param_no == 2) {
 	if (fixup_pvar_null(param, 1) != 0) {
 	if (fixup_pvar_null(param, 1) != 0) {
 	    LM_ERR("failed to fixup result pvar\n");
 	    LM_ERR("failed to fixup result pvar\n");
 	    return -1;
 	    return -1;
@@ -352,14 +352,59 @@ static int fixup_http_query(void** param, int param_no)
 /*
 /*
  * Free http_query params.
  * Free http_query params.
  */
  */
-static int fixup_free_http_query(void** param, int param_no)
+static int fixup_free_http_query_get(void** param, int param_no)
 {
 {
     if (param_no == 1) {
     if (param_no == 1) {
 	LM_WARN("free function has not been defined for spve\n");
 	LM_WARN("free function has not been defined for spve\n");
 	return 0;
 	return 0;
     }
     }
 
 
-    if ((param_no == 2) || (param_no == 3)) {
+    if (param_no == 2) {
+	return fixup_free_pvar_null(param, 1);
+    }
+    
+    LM_ERR("invalid parameter number <%d>\n", param_no);
+    return -1;
+}
+
+
+/*
+ * Fix http_query params: url (string that may contain pvars) and
+ * result (writable pvar).
+ */
+static int fixup_http_query_post(void** param, int param_no)
+{
+    if ((param_no == 1) || (param_no == 2)) {
+	return fixup_spve_null(param, 1);
+    }
+
+    if (param_no == 3) {
+	if (fixup_pvar_null(param, 1) != 0) {
+	    LM_ERR("failed to fixup result pvar\n");
+	    return -1;
+	}
+	if (((pv_spec_t *)(*param))->setf == NULL) {
+	    LM_ERR("result pvar is not writeble\n");
+	    return -1;
+	}
+	return 0;
+    }
+
+    LM_ERR("invalid parameter number <%d>\n", param_no);
+    return -1;
+}
+
+/*
+ * Free http_query params.
+ */
+static int fixup_free_http_query_post(void** param, int param_no)
+{
+    if ((param_no == 1) || (param_no == 2)) {
+	LM_WARN("free function has not been defined for spve\n");
+	return 0;
+    }
+
+    if (param_no == 3) {
 	return fixup_free_pvar_null(param, 1);
 	return fixup_free_pvar_null(param, 1);
     }
     }