36
uint16_t uwsgi_rpc(char *name, uint8_t argc, char *argv[], char *output) {
36
uint16_t uwsgi_rpc(char *name, uint8_t argc, char *argv[], uint16_t argvs[], char *output) {
38
38
struct uwsgi_rpc *urpc = NULL;
52
52
if (uwsgi.p[urpc->modifier1]->rpc) {
53
ret = uwsgi.p[urpc->modifier1]->rpc(urpc->func, argc, argv, output);
53
ret = uwsgi.p[urpc->modifier1]->rpc(urpc->func, argc, argv, argvs, output);
61
char *uwsgi_do_rpc(char *node, char *func, uint8_t argc, char *argv[], uint16_t argvs[], uint16_t *len) {
65
struct uwsgi_header uh;
70
if (node == NULL || !strcmp(node, "")) {
71
// allocate the whole buffer
72
buffer = uwsgi_malloc(65536);
73
*len = uwsgi_rpc(func, argc, argv, argvs, buffer);
79
int fd = uwsgi_connect(node, uwsgi.shared->options[UWSGI_OPTION_SOCKET_TIMEOUT], 0);
81
if (fd < 0) return NULL;
83
// prepare a uwsgi array
84
uint16_t buffer_size = 2 + strlen(func);
86
for (i = 0; i < argc; i++) {
87
buffer_size += 2 + argvs[i];
90
// allocate the whole buffer
91
buffer = uwsgi_malloc(65536);
94
uh.pktsize = buffer_size;
97
// add func to the array
98
char *bufptr = buffer;
100
*bufptr++ = (uint8_t) (ulen & 0xff);
101
*bufptr++ = (uint8_t) ((ulen >> 8) & 0xff);
102
memcpy(bufptr, func, ulen);
105
for (i = 0; i < argc; i++) {
107
*bufptr++ = (uint8_t) (ulen & 0xff);
108
*bufptr++ = (uint8_t) ((ulen >> 8) & 0xff);
109
memcpy(bufptr, argv[i], ulen);
113
if (write(fd, &uh, 4) != 4) {
114
uwsgi_error("write()");
120
if (write(fd, buffer, buffer_size) != buffer_size) {
121
uwsgi_error("write()");
127
if (uwsgi_read_response(fd, &uh, uwsgi.shared->options[UWSGI_OPTION_SOCKET_TIMEOUT], &buffer) < 0) {