void ccnet_processor_send_update(CcnetProcessor *processor, const char *code, const char *code_msg, const char *content, int clen) { ccnet_client_send_update (processor->session, UPDATE_ID(processor->id), code, code_msg, content, clen); }
static char * invoke_service (CcnetClient *session, const char *peer_id, const char *service, const char *fcall_str, size_t fcall_len, size_t *ret_len) { struct CcnetResponse *rsp; uint32_t req_id; GString *buf; req_id = ccnet_client_get_rpc_request_id (session, peer_id, service); if (req_id == 0) { *ret_len = 0; return NULL; } ccnet_client_send_update (session, req_id, SC_CLIENT_CALL, SS_CLIENT_CALL, fcall_str, fcall_len); if (ccnet_client_read_response (session) < 0) { *ret_len = 0; ccnet_client_clean_rpc_request (session, req_id); return NULL; } rsp = &session->response; if (memcmp (rsp->code, SC_SERVER_RET, 3) == 0) { *ret_len = (size_t) rsp->clen; return g_strndup (rsp->content, rsp->clen); } else if (memcmp (rsp->code, SC_SERVER_MORE, 3) != 0) { g_warning ("[Sea RPC] Bad response: %s %s.\n", rsp->code, rsp->code_msg); *ret_len = 0; return NULL; } buf = g_string_new_len (rsp->content, rsp->clen); while (1) { ccnet_client_send_update (session, req_id, SC_CLIENT_MORE, SS_CLIENT_MORE, fcall_str, fcall_len); if (ccnet_client_read_response (session) < 0) { *ret_len = 0; ccnet_client_clean_rpc_request (session, req_id); g_string_free (buf, TRUE); return NULL; } rsp = &session->response; if (memcmp (rsp->code, SC_SERVER_RET, 3) == 0) { g_string_append_len (buf, rsp->content, rsp->clen); *ret_len = buf->len; return g_string_free (buf, FALSE); } else if (memcmp (rsp->code, SC_SERVER_MORE, 3) == 0) { g_string_append_len (buf, rsp->content, rsp->clen); } else { g_warning ("[Sea RPC] Bad response: %s %s.\n", rsp->code, rsp->code_msg); *ret_len = 0; g_string_free (buf, TRUE); return NULL; } } /* Never reach here. */ return NULL; }