static int send_JOIN_PLACE(struct mwPlace *place) { struct mwOpaque o = {0, 0}; struct mwPutBuffer *b; int ret; b = mwPutBuffer_new(); gboolean_put(b, FALSE); guint16_put(b, 0x01); guint16_put(b, 0x02); /* 0x01 */ guint16_put(b, 0x01); /* 0x00 */ mwPutBuffer_finalize(&o, b); ret = mwChannel_send(place->channel, msg_out_JOIN_PLACE, &o); mwOpaque_clear(&o); if(ret) { place_state(place, mwPlace_ERROR); } else { place_state(place, mwPlace_JOINING); } return ret; }
static int send_attrib_list(struct mwServiceAware *srvc) { struct mwPutBuffer *b; struct mwOpaque o; int tmp; GList *l; g_return_val_if_fail(srvc != NULL, -1); g_return_val_if_fail(srvc->channel != NULL, 0); l = map_collect_keys(srvc->attribs); tmp = g_list_length(l); b = mwPutBuffer_new(); guint32_put(b, 0x00); guint32_put(b, tmp); for(; l; l = g_list_delete_link(l, l)) { guint32_put(b, GPOINTER_TO_UINT(l->data)); } mwPutBuffer_finalize(&o, b); tmp = mwChannel_send(srvc->channel, msg_OPT_WATCH, &o); mwOpaque_clear(&o); return tmp; }
int mwFileTransfer_send(struct mwFileTransfer *ft, struct mwOpaque *data) { struct mwChannel *chan; int ret; g_return_val_if_fail(ft != NULL, -1); g_return_val_if_fail(mwFileTransfer_isOpen(ft), -1); g_return_val_if_fail(ft->channel != NULL, -1); chan = ft->channel; g_return_val_if_fail(mwChannel_isOutgoing(chan), -1); if(data->len > ft->remaining) { /* @todo handle error */ return -1; } ret = mwChannel_send(chan, msg_TRANSFER, data); if(! ret) ft->remaining -= data->len; /* we're not done until we receive an ACK for the last piece of outgoing data */ return ret; }
static int dir_close(struct mwDirectory *dir) { struct mwServiceDirectory *srvc; struct mwChannel *chan; struct mwPutBuffer *b; struct mwOpaque o; int ret; g_return_val_if_fail(dir != NULL, -1); srvc = dir->service; g_return_val_if_fail(srvc != NULL, -1); chan = srvc->channel; g_return_val_if_fail(chan != NULL, -1); b = mwPutBuffer_new(); guint32_put(b, next_request_id(dir->service)); guint32_put(b, dir->id); mwPutBuffer_finalize(&o, b); ret = mwChannel_send(chan, action_close, &o); mwOpaque_clear(&o); return ret; }
int mwDirectory_search(struct mwDirectory *dir, const char *query) { struct mwServiceDirectory *srvc; struct mwChannel *chan; struct mwPutBuffer *b; struct mwOpaque o; int ret; g_return_val_if_fail(dir != NULL, -1); g_return_val_if_fail(MW_DIRECTORY_IS_OPEN(dir), -1); g_return_val_if_fail(query != NULL, -1); g_return_val_if_fail(*query != '\0', -1); srvc = dir->service; g_return_val_if_fail(srvc != NULL, -1); chan = srvc->channel; g_return_val_if_fail(chan != NULL, -1); b = mwPutBuffer_new(); guint32_put(b, map_request(dir)); guint32_put(b, dir->id); guint16_put(b, 0x0061); /* some magic? */ guint32_put(b, 0x00000008); /* seek results */ mwString_put(b, query); mwPutBuffer_finalize(&o, b); ret = mwChannel_send(chan, action_search, &o); mwOpaque_clear(&o); return ret; }
static int dir_open(struct mwDirectory *dir) { struct mwServiceDirectory *srvc; struct mwChannel *chan; struct mwPutBuffer *b; struct mwOpaque o; int ret; g_return_val_if_fail(dir != NULL, -1); srvc = dir->service; g_return_val_if_fail(srvc != NULL, -1); chan = srvc->channel; g_return_val_if_fail(chan != NULL, -1); b = mwPutBuffer_new(); guint32_put(b, map_request(dir)); /* unsure about these three bytes */ gboolean_put(b, FALSE); guint16_put(b, 0x0000); guint32_put(b, dir->book->id); mwString_put(b, dir->book->name); mwPutBuffer_finalize(&o, b); ret = mwChannel_send(chan, action_open, &o); mwOpaque_clear(&o); return ret; }
int mwPlace_unsetAttribute(struct mwPlace *place, guint32 attrib) { struct mwOpaque o = {0,0}; struct mwPutBuffer *b; int ret; b = mwPutBuffer_new(); guint32_put(b, place->our_id); guint32_put(b, attrib); ret = mwChannel_send(place->channel, msg_out_SET_ATTR, &o); mwOpaque_clear(&o); return ret; }
static int send_rem(struct mwChannel *chan, GList *id_list) { struct mwPutBuffer *b = mwPutBuffer_new(); struct mwOpaque o; int ret; g_return_val_if_fail(chan != NULL, 0); compose_list(b, id_list); mwPutBuffer_finalize(&o, b); ret = mwChannel_send(chan, msg_AWARE_REMOVE, &o); mwOpaque_clear(&o); return ret; }
static int send_SECTION_LIST(struct mwPlace *place, guint32 section) { int ret = 0; struct mwOpaque o = {0, 0}; struct mwPutBuffer *b; b = mwPutBuffer_new(); guint16_put(b, msg_out_SECTION_LIST); guint32_put(b, section); gboolean_put(b, FALSE); guint32_put(b, ++place->requests); mwPutBuffer_finalize(&o, b); ret = mwChannel_send(place->channel, msg_out_SECTION, &o); mwOpaque_clear(&o); return ret; }
int mwPlace_sendText(struct mwPlace *place, const char *msg) { struct mwOpaque o = {0,0}; struct mwPutBuffer *b; int ret; b = mwPutBuffer_new(); guint32_put(b, 0x01); /* probably a message type */ mwString_put(b, msg); mwPutBuffer_finalize(&o, b); b = mwPutBuffer_new(); guint32_put(b, place->section); mwOpaque_put(b, &o); mwOpaque_clear(&o); mwPutBuffer_finalize(&o, b); ret = mwChannel_send(place->channel, msg_out_MESSAGE, &o); mwOpaque_clear(&o); return ret; }
int mwPlace_legacyInvite(struct mwPlace *place, struct mwIdBlock *idb, const char *message) { struct mwOpaque o = {0,0}; struct mwPutBuffer *b; int ret; b = mwPutBuffer_new(); mwIdBlock_put(b, idb); mwString_put(b, idb->user); mwString_put(b, idb->user); mwString_put(b, message); gboolean_put(b, FALSE); mwPutBuffer_finalize(&o, b); ret = mwChannel_send(place->channel, msg_out_OLD_INVITE, &o); mwOpaque_clear(&o); return ret; }
int mwServiceDirectory_refreshAddressBooks(struct mwServiceDirectory *srvc) { struct mwChannel *chan; struct mwPutBuffer *b; struct mwOpaque o; int ret; g_return_val_if_fail(srvc != NULL, -1); chan = srvc->channel; g_return_val_if_fail(chan != NULL, -1); b = mwPutBuffer_new(); guint32_put(b, next_request_id(srvc)); mwPutBuffer_finalize(&o, b); ret = mwChannel_send(chan, action_list, &o); mwOpaque_clear(&o); return ret; }
static int request_send(struct mwChannel *chan, struct mwStorageReq *req) { struct mwPutBuffer *b; struct mwOpaque o = { 0, 0 }; int ret; b = mwPutBuffer_new(); request_put(b, req); mwPutBuffer_finalize(&o, b); ret = mwChannel_send(chan, req->action, &o); mwOpaque_clear(&o); if(! ret) { if(req->action == action_save) { req->action = action_saved; } else if(req->action == action_load) { req->action = action_loaded; } } return ret; }