mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-07-22 11:53:16 +00:00
FS-9952: Add query & tests for blade extention to rpc messages
This commit is contained in:
parent
06e38ba1ff
commit
d6d8ede6b9
@ -812,6 +812,7 @@ KS_DECLARE(ks_rpcmessageid_t) blade_rpc_create_response(cJSON *request,
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char BLADE_JRPC_METHOD[] = "method";
|
const char BLADE_JRPC_METHOD[] = "method";
|
||||||
|
const char BLADE_JRPC_ID[] = "id";
|
||||||
const char BLADE_JRPC_FIELDS[] = "blade";
|
const char BLADE_JRPC_FIELDS[] = "blade";
|
||||||
const char BLADE_JRPC_TO[] = "to";
|
const char BLADE_JRPC_TO[] = "to";
|
||||||
const char BLADE_JRPC_FROM[] = "from";
|
const char BLADE_JRPC_FROM[] = "from";
|
||||||
@ -822,15 +823,22 @@ KS_DECLARE(ks_status_t) blade_rpc_parse_message(cJSON *message,
|
|||||||
char **namespaceP,
|
char **namespaceP,
|
||||||
char **methodP,
|
char **methodP,
|
||||||
char **versionP,
|
char **versionP,
|
||||||
|
uint32_t *idP,
|
||||||
blade_rpc_fields_t **fieldsP)
|
blade_rpc_fields_t **fieldsP)
|
||||||
{
|
{
|
||||||
const char *m = cJSON_GetObjectCstr(message, BLADE_JRPC_METHOD);
|
const char *m = cJSON_GetObjectCstr(message, BLADE_JRPC_METHOD);
|
||||||
cJSON *blade = cJSON_GetObjectItem(message, BLADE_JRPC_FIELDS);
|
cJSON *blade = cJSON_GetObjectItem(message, BLADE_JRPC_FIELDS);
|
||||||
|
cJSON *jid = cJSON_GetObjectItem(message, BLADE_JRPC_ID);
|
||||||
|
|
||||||
*fieldsP = NULL;
|
*fieldsP = NULL;
|
||||||
*namespaceP = NULL;
|
*namespaceP = NULL;
|
||||||
*versionP = NULL;
|
*versionP = NULL;
|
||||||
*methodP = NULL;
|
*methodP = NULL;
|
||||||
|
*idP = 0;
|
||||||
|
|
||||||
|
if (jid) {
|
||||||
|
*idP = jid->valueint;
|
||||||
|
}
|
||||||
|
|
||||||
if (!m || !blade) {
|
if (!m || !blade) {
|
||||||
const char *buffer = cJSON_PrintUnformatted(message);
|
const char *buffer = cJSON_PrintUnformatted(message);
|
||||||
@ -839,20 +847,60 @@ KS_DECLARE(ks_status_t) blade_rpc_parse_message(cJSON *message,
|
|||||||
return KS_STATUS_FAIL;
|
return KS_STATUS_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cJSON *jto = cJSON_GetObjectItem(blade, BLADE_JRPC_TO);
|
||||||
|
cJSON *jfrom = cJSON_GetObjectItem(blade, BLADE_JRPC_FROM);
|
||||||
|
cJSON *jtoken = cJSON_GetObjectItem(blade, BLADE_JRPC_TOKEN);
|
||||||
|
|
||||||
|
|
||||||
ks_size_t len = KS_RPCMESSAGE_COMMAND_LENGTH + 1 +
|
ks_size_t len = KS_RPCMESSAGE_COMMAND_LENGTH + 1 +
|
||||||
KS_RPCMESSAGE_NAMESPACE_LENGTH + 1 +
|
KS_RPCMESSAGE_NAMESPACE_LENGTH + 1 +
|
||||||
KS_RPCMESSAGE_VERSION_LENGTH + 1 +
|
KS_RPCMESSAGE_VERSION_LENGTH + 1 +
|
||||||
sizeof(blade_rpc_fields_t) + 1;
|
sizeof(blade_rpc_fields_t) + 1;
|
||||||
|
|
||||||
|
uint32_t lento = 0;
|
||||||
|
uint32_t lenfrom = 0;
|
||||||
|
uint32_t lentoken = 0;
|
||||||
|
|
||||||
|
if (jto) {
|
||||||
|
lento = strlen(jto->valuestring) + 1;
|
||||||
|
len += lento;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jfrom) {
|
||||||
|
lenfrom += strlen(jfrom->valuestring) + 1;
|
||||||
|
len += lenfrom;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jtoken) {
|
||||||
|
lentoken += strlen(jtoken->valuestring) + 1;
|
||||||
|
len += lentoken;
|
||||||
|
}
|
||||||
|
|
||||||
blade_rpc_fields_t *fields = (blade_rpc_fields_t *)ks_pool_alloc(g_handle->pool, len);
|
blade_rpc_fields_t *fields = (blade_rpc_fields_t *)ks_pool_alloc(g_handle->pool, len);
|
||||||
|
|
||||||
fields->to = cJSON_GetObjectCstr(blade, BLADE_JRPC_TO);
|
char *namespace = (char*)fields + sizeof(blade_rpc_fields_t);
|
||||||
fields->from = cJSON_GetObjectCstr(blade, BLADE_JRPC_FROM);
|
char *command = namespace + KS_RPCMESSAGE_NAMESPACE_LENGTH + 1;
|
||||||
fields->from = cJSON_GetObjectCstr(blade, BLADE_JRPC_TOKEN);
|
char *version = command + KS_RPCMESSAGE_COMMAND_LENGTH + 1;
|
||||||
|
|
||||||
char *namespace = (char*)fields + sizeof(blade_rpc_fields_t);
|
char *ptr = version + KS_RPCMESSAGE_VERSION_LENGTH + 1;
|
||||||
char *command = namespace + KS_RPCMESSAGE_NAMESPACE_LENGTH + 1;
|
|
||||||
char *version = command + KS_RPCMESSAGE_COMMAND_LENGTH + 1;
|
if (jto) {
|
||||||
|
strcpy(ptr, jto->valuestring);
|
||||||
|
fields->to = ptr;
|
||||||
|
ptr += strlen(jto->valuestring) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jfrom) {
|
||||||
|
strcpy(ptr, jfrom->valuestring);
|
||||||
|
fields->from = ptr;
|
||||||
|
ptr += strlen(jfrom->valuestring) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jtoken) {
|
||||||
|
strcpy(ptr, jtoken->valuestring);
|
||||||
|
fields->token = ptr;
|
||||||
|
ptr += strlen(jtoken->valuestring) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
blade_rpc_parse_fqcommand(m, namespace, command);
|
blade_rpc_parse_fqcommand(m, namespace, command);
|
||||||
|
|
||||||
@ -861,6 +909,7 @@ KS_DECLARE(ks_status_t) blade_rpc_parse_message(cJSON *message,
|
|||||||
*fieldsP = fields;
|
*fieldsP = fields;
|
||||||
*namespaceP = namespace;
|
*namespaceP = namespace;
|
||||||
*methodP = command;
|
*methodP = command;
|
||||||
|
*versionP = version;
|
||||||
|
|
||||||
return KS_STATUS_SUCCESS;
|
return KS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -131,6 +131,7 @@ KS_DECLARE(ks_status_t) blade_rpc_parse_message(cJSON *message,
|
|||||||
char **namespace,
|
char **namespace,
|
||||||
char **method,
|
char **method,
|
||||||
char **version,
|
char **version,
|
||||||
|
uint32_t *idP,
|
||||||
blade_rpc_fields_t **fieldsP);
|
blade_rpc_fields_t **fieldsP);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -29,7 +29,8 @@ static enum jrpc_status_t process_widget(cJSON *msg, cJSON **response)
|
|||||||
cJSON *resp = cJSON_CreateObject();
|
cJSON *resp = cJSON_CreateObject();
|
||||||
cJSON_AddNumberToObject(resp, "code", 199);
|
cJSON_AddNumberToObject(resp, "code", 199);
|
||||||
|
|
||||||
ks_rpcmessageid_t msgid = ks_rpcmessage_create_response(msg, &resp, response);
|
//ks_rpcmessageid_t msgid = ks_rpcmessage_create_response(msg, &resp, response);
|
||||||
|
ks_rpcmessageid_t msgid = blade_rpc_create_response(msg, &resp, response);
|
||||||
|
|
||||||
char *b1 = cJSON_PrintUnformatted(*response); //(*response);
|
char *b1 = cJSON_PrintUnformatted(*response); //(*response);
|
||||||
printf("Response: msgid %d\n%s\n", msgid, b1);
|
printf("Response: msgid %d\n%s\n", msgid, b1);
|
||||||
@ -75,10 +76,27 @@ static enum jrpc_status_t process_wombat(cJSON *msg, cJSON **replyP)
|
|||||||
ks_pool_free(pool, &b1);
|
ks_pool_free(pool, &b1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printf("process_wombat_preresponse: unable to create response \n");
|
printf("process_wombat: unable to create response \n");
|
||||||
return JRPC_ERROR;
|
return JRPC_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
blade_rpc_fields_t *r_fields;
|
||||||
|
|
||||||
|
char *r_method;
|
||||||
|
char *r_namespace;
|
||||||
|
char *r_version;
|
||||||
|
uint32_t r_id;
|
||||||
|
|
||||||
|
ks_status_t s1 = blade_rpc_parse_message(msg, &r_namespace, &r_method, &r_version, &r_id, &r_fields);
|
||||||
|
|
||||||
|
if (s1 == KS_STATUS_FAIL) {
|
||||||
|
printf("process_wombat: blade_rpc_parse_message failed\n");
|
||||||
|
return JRPC_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\nprocess_wombat: blade_rpc_parse_message namespace %s, method %s, id %d, version %s, to %s, from %s, token %s\n\n",
|
||||||
|
r_namespace, r_method, r_id, r_version,
|
||||||
|
r_fields->to, r_fields->from, r_fields->token);
|
||||||
|
|
||||||
cJSON *parms2 = NULL;
|
cJSON *parms2 = NULL;
|
||||||
|
|
||||||
@ -92,7 +110,23 @@ static enum jrpc_status_t process_wombat(cJSON *msg, cJSON **replyP)
|
|||||||
fields.token = token;
|
fields.token = token;
|
||||||
|
|
||||||
// msgid = ks_rpcmessage_create_request("app1", "widget", &parms2, replyP);
|
// msgid = ks_rpcmessage_create_request("app1", "widget", &parms2, replyP);
|
||||||
msgid = blade_rpc_create_request("app1", "widget", &fields, &parms2, replyP);
|
msgid = blade_rpc_create_request(r_namespace, r_method, &fields, NULL, replyP);
|
||||||
|
|
||||||
|
if (!msgid) {
|
||||||
|
printf("process wombat: create of next request failed\n");
|
||||||
|
return JRPC_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
b0 = cJSON_PrintUnformatted(*replyP);
|
||||||
|
|
||||||
|
if (!b0) {
|
||||||
|
printf("process wombat: create of next request cannot be formatted\n");
|
||||||
|
return JRPC_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
printf("\nprocess wombat: next request\n%s\n\n", b0);
|
||||||
|
|
||||||
|
|
||||||
printf("\n\nexiting process_wombat with a reply to send\n");
|
printf("\n\nexiting process_wombat with a reply to send\n");
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user