Example #1
0
/**
 * Add a new friend request to a profile.
 *
 * Returns index on success, -1 on a full friend request list and -2 for any
 * other error.
 */
int
twc_friend_request_add(struct t_twc_profile *profile,
                       const uint8_t *client_id,
                       const char *message)
{
    size_t max_request_count =
        TWC_PROFILE_OPTION_INTEGER(profile, TWC_PROFILE_OPTION_MAX_FRIEND_REQUESTS);
    if (profile->friend_requests->count >= max_request_count)
        return -1;

    // create a new request
    struct t_twc_friend_request *request
        = malloc(sizeof(struct t_twc_friend_request));
    if (!request)
        return -2;

    request->profile = profile;
    request->message = strdup(message);
    memcpy(request->tox_id, client_id, TOX_PUBLIC_KEY_SIZE);

    if (!twc_list_item_new_data_add(profile->friend_requests, request))
        return -2;

    return profile->friend_requests->count - 1;
}
Example #2
0
/**
 * Add a new group invite to a profile.
 *
 * Returns the index of the invite on success, -1 on error.
 */
int
twc_group_chat_invite_add(struct t_twc_profile *profile, int32_t friend_number,
                          uint8_t group_chat_type, uint8_t *data, size_t size)
{
    /* create a new invite object */
    struct t_twc_group_chat_invite *invite =
        malloc(sizeof(struct t_twc_group_chat_invite));
    if (!invite)
        return -1;

    uint8_t *data_copy = malloc(size);
    memcpy(data_copy, data, size);

    invite->profile = profile;
    invite->friend_number = friend_number;
    invite->group_chat_type = group_chat_type;
    invite->data = data_copy;
    invite->data_size = size;

    if (TWC_PROFILE_OPTION_BOOLEAN(profile, TWC_PROFILE_OPTION_AUTOJOIN))
        invite->autojoin_delay = TWC_PROFILE_OPTION_INTEGER(
            profile, TWC_PROFILE_OPTION_AUTOJOIN_DELAY);
    else
        invite->autojoin_delay = 0;

    twc_list_item_new_data_add(profile->group_chat_invites, invite);

    return profile->group_chat_invites->count - 1;
}