Changeset f3af614 for protocols/rpc
- Timestamp:
- 2015-04-11T23:27:57Z (10 years ago)
- Children:
- c5a7b8d
- Parents:
- 16652e9
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
protocols/rpc/rpc.c
r16652e9 rf3af614 128 128 } 129 129 130 static JSON_Value *rpc_ser_bee_user(bee_user_t *bu) { 131 JSON_Value *v = json_value_init_object(); 132 JSON_Object *o = json_object(v); 133 json_object_set_string_or_null(o, "handle", bu->handle); 134 json_object_set_string_or_null(o, "fullname", bu->fullname); 135 json_object_set_string_or_null(o, "nick", bu->nick); 136 json_object_set_string_or_null(o, "group", bu->group ? bu->group->name : NULL); 137 json_object_set_number(o, "flags", bu->flags); 138 json_object_set_string_or_null(o, "status", bu->status); 139 json_object_set_string_or_null(o, "status_msg", bu->status_msg); 140 json_object_set_number(o, "login_time", bu->login_time); 141 json_object_set_number(o, "idle_time", bu->idle_time); 142 return v; 143 } 144 130 145 static void rpc_init(account_t *acc) { 131 146 struct rpc_plugin *pd = acc->prpl->data; … … 134 149 JSON_Object *o = json_object(value); 135 150 set_t *set = set_add(&acc->set, name, json_object_get_string(o, "default"), NULL, acc); 151 /* JSON numbers are floats. The following line "might" be a 152 * terrible idea. As was JSON, but hey. */ 153 set->flags |= (int) json_object_get_number(o, "flags"); 154 const char *eval = json_object_get_string(o, "type"); 155 if (eval == NULL) { 156 } else if (strcmp(eval, "int") == 0) { 157 set->eval = set_eval_int; 158 } else if (strcmp(eval, "bool") == 0) { 159 set->eval = set_eval_bool; 160 } else { 161 /* Default is string which means no evaluator. */ 162 } 163 /* eval_list turns out to be a memory leak so don't implement it 164 * for now. 165 * Allowing a plugin to define its own evaluator is not really 166 * possible without having BitlBee block on it responding which 167 * I don't want to do. 168 * Should a module want to override a user's setting, it can 169 * use set_setstr(). (Though ATM setting changes are not yet 170 * passed to the module immediately. TODO. */ 136 171 } 137 172 } … … 542 577 } 543 578 579 static JSON_Value *rpc_set_getstr(struct im_connection *ic, void *func_, JSON_Array *params) { 580 char *rets = set_getstr(&ic->acc->set, json_array_get_string(params, 0)); 581 JSON_Value *ret = json_value_init_object(); 582 if (rets) 583 json_object_set_string(json_object(ret), "result", rets); 584 else 585 json_object_set_null(json_object(ret), "result"); 586 return ret; 587 } 588 589 static JSON_Value *rpc_set_setstr(struct im_connection *ic, void *func_, JSON_Array *params) { 590 /* Sadly use of const is very poor in BitlBee. :-( */ 591 char *newval = g_strdup(json_array_get_string(params, 1)); 592 set_setstr(&ic->acc->set, json_array_get_string(params, 0), newval); 593 g_free(newval); 594 return rpc_set_getstr(ic, func_, params); 595 } 596 597 static JSON_Value *rpc_set_reset(struct im_connection *ic, void *func_, JSON_Array *params) { 598 set_reset(&ic->acc->set, json_array_get_string(params, 0)); 599 return rpc_set_getstr(ic, func_, params); 600 } 601 602 static JSON_Value *rpc_bee_user_by_handle(struct im_connection *ic, void *func_, JSON_Array *params) { 603 bee_user_t *bu = bee_user_by_handle(ic->bee, ic, json_array_get_string(params, 0)); 604 JSON_Value *ret = json_value_init_object(); 605 if (bu) 606 json_object_set_value(json_object(ret), "result", rpc_ser_bee_user(bu)); 607 else 608 json_object_set_value(json_object(ret), "error", jsonrpc_error(ENOENT, "Contact not found")); 609 return ret; 610 } 611 544 612 struct rpc_in_method { 545 613 char *name; … … 551 619 static const struct rpc_in_method methods[] = { 552 620 /* All these RPCs are equivalent of BitlBee C functions but with the 553 * struct im_connection* removed . */621 * struct im_connection* removed as this is in the object context. */ 554 622 { "imcb_log", imcb_log, rpc_imcb_log, "s" }, 555 623 { "imcb_error", imcb_error, rpc_imcb_log, "s" }, … … 576 644 { "imcb_chat_remove_buddy", imcb_chat_remove_buddy, rpc_imcb_chat_remove_buddy, "nss" }, 577 645 { "imcb_chat_invite", imcb_chat_invite, rpc_imcb_chat_invite, "nsss" }, 646 647 /* These are not imcb* functions but should still be exported. */ 648 /* Setting functions. Starting with just providing access to account 649 * settings. See later whether access to chat/chan settings is necessary. 650 * All of these will return the (new) value of given setting. */ 651 { "set_getstr", NULL, rpc_set_getstr, "s" }, 652 { "set_setstr", NULL, rpc_set_setstr, "ss" }, 653 { "set_reset", NULL, rpc_set_reset, "s" }, 654 655 { "bee_user_by_handle", NULL, rpc_bee_user_by_handle, "s" }, 578 656 579 657 { NULL }, … … 710 788 struct prpl *ret = g_new0(struct prpl, 1); 711 789 712 JSON_Array *methods_a = json_object_get_array(isup, "method s");790 JSON_Array *methods_a = json_object_get_array(isup, "method_list"); 713 791 GHashTable *methods = g_hash_table_new(g_str_hash, g_str_equal); 714 792 for (i = 0; i < json_array_get_count(methods_a); i++)
Note: See TracChangeset
for help on using the changeset viewer.