struct mwConversation *mwServiceIm_getConversation(struct mwServiceIm *srvc, struct mwIdBlock *to) { struct mwConversation *c; g_return_val_if_fail(srvc != NULL, NULL); g_return_val_if_fail(to != NULL, NULL); c = convo_find_by_user(srvc, to); if(! c) { c = g_new0(struct mwConversation, 1); c->service = srvc; mwIdBlock_clone(&c->target, to); c->state = mwConversation_CLOSED; c->features = srvc->features; /* mark external users */ /* c->ext_id = g_str_has_prefix(to->user, "@E "); */ srvc->convs = g_list_prepend(srvc->convs, c); }
struct mwFileTransfer * mwFileTransfer_new(struct mwServiceFileTransfer *srvc, const struct mwIdBlock *who, const char *msg, const char *filename, guint32 filesize) { struct mwFileTransfer *ft; g_return_val_if_fail(srvc != NULL, NULL); g_return_val_if_fail(who != NULL, NULL); ft = g_new0(struct mwFileTransfer, 1); ft->service = srvc; mwIdBlock_clone(&ft->who, who); ft->filename = g_strdup(filename); ft->message = g_strdup(msg); ft->size = ft->remaining = filesize; ft_state(ft, mwFileTransfer_NEW); /* stick a reference in the service */ srvc->transfers = g_list_prepend(srvc->transfers, ft); return ft; }