static void getHandles(Dict* args, void* vcontext, String* txid, struct Allocator* requestAlloc) { struct Context* context = Identity_check((struct Context*) vcontext); struct Allocator* alloc = Allocator_child(context->alloc); int64_t* page = Dict_getInt(args, String_CONST("page")); int i = (page) ? *page * ENTRIES_PER_PAGE : 0; struct SessionManager_HandleList* hList = SessionManager_getHandleList(context->sm, alloc); List* list = List_new(alloc); for (int counter = 0; i < hList->length && counter++ < ENTRIES_PER_PAGE; i++) { List_addInt(list, hList->handles[i], alloc); } Dict* r = Dict_new(alloc); Dict_putList(r, String_CONST("handles"), list, alloc); Dict_putInt(r, String_CONST("total"), hList->length, alloc); String* more = String_CONST("more"); if (i < hList->length) { Dict_putInt(r, more, 1, alloc); } Admin_sendMessage(r, txid, context->admin); Allocator_free(alloc); }
static void listConnections(Dict* args, void* vcontext, String* txid) { struct Context* context = vcontext; struct Allocator* alloc; BufferAllocator_STACK(alloc, 1024); List* l = NULL; for (int i = 0; i < (int)context->ipTun->connectionList.count; i++) { l = List_addInt(l, context->ipTun->connectionList.connections[i].number, alloc); } Dict resp = Dict_CONST( String_CONST("connections"), List_OBJ(l), Dict_CONST( String_CONST("error"), String_OBJ(String_CONST("none")), NULL )); Admin_sendMessage(&resp, txid, context->admin); }
static void listConnections(Dict* args, void* vcontext, String* txid, struct Allocator* alloc) { struct Context* context = vcontext; List* l = List_new(alloc); for (int i = 0; i < (int)context->ipTun->connectionList.count; i++) { List_addInt(l, context->ipTun->connectionList.connections[i].number, alloc); } Dict* resp = Dict_new(alloc); Dict_putList(resp, String_CONST("connections"), l, alloc); Dict_putString(resp, String_CONST("error"), String_CONST("none"), alloc); Admin_sendMessage(resp, txid, context->admin); }