Example #1
0
CcnetPeer*
ccnet_peer_from_string (char *content)
{
    CcnetPeer *peer = NULL;

    char *ptr, *start = content;
    
    if ( !(ptr = strchr(start, '\n')) ) return NULL;
    *ptr = '\0';
    char *object_id = start;
    start = ptr + 1;
    
    char *object_type = ccnet_object_type_from_id (object_id);
    if (g_strcmp0(object_type, OBJECT_TYPE_STRING) != 0)
        goto out;

    char *pure_id = object_id + strlen(object_type) + 1;
    if (!peer_id_valid(pure_id)) {
        ccnet_warning ("Wrong peer id %s\n", pure_id);
        goto out;
    }

    peer = ccnet_peer_new (pure_id);
    parse_key_value_pairs (
        start, (KeyValueFunc)parse_field, peer);

out:
    g_free (object_type);
    return peer;
}
Example #2
0
static void receive_keepalive(CcnetProcessor *processor, 
                              char *code, char *code_msg,
                              char *content, int clen)
{
    CcnetPeer *peer = processor->peer;

    if (clen == 0 || content[clen-1] != '\0' || content[clen-2] != '\n')
    {
        ccnet_processor_send_response (
            processor, SC_BAD_KEEPALIVE, SS_BAD_KEEPALIVE, NULL, 0);
        ccnet_processor_done (processor, FALSE);
        return;
    }

    parse_key_value_pairs (content, update_from_key_value, peer);

    /* ccnet_debug ("[Keepalive] Receive keepalive from %.8s #%s\n", */
    /*              processor->peer->id, code_msg); */
    ccnet_processor_send_response (
        processor, code, code_msg, NULL, 0);

    /* Peer discovered us, so we try to discover peer too.
     * Used in indirect connection vie Relay */
    /*
    if (peer->net_state == PEER_DOWN && peer->relay_list != NULL) {
        if (!peer->keepalive_sending)
            start_keepalive (processor->session->proc_factory, peer);
    }
    */
}
Example #3
0
void
ccnet_peer_update_from_string (CcnetPeer *peer, char *content)
{
    char *ptr, *start = content;
    
    if ( !(ptr = strchr(start, '\n')) ) return;
    *ptr = '\0';
    char *object_id = start;
    start = ptr + 1;
    
    char *object_type = ccnet_object_type_from_id (object_id);
    if (strcmp(object_type, OBJECT_TYPE_STRING) != 0)
        goto out;

    char *pure_id = object_id + strlen(object_type) + 1;
    g_return_if_fail (strcmp(pure_id, peer->id) == 0);
    
    parse_key_value_pairs (
        start, (KeyValueFunc)parse_field, peer);

    peer->need_saving = 1;
out:
    g_free (object_type);
}
Example #4
0
static void
handle_seafile_notification (char *type, char *content)
{
    char buf[1024];

    if (strcmp(type, "transfer") == 0) {
        if (applet->auto_sync_disabled) {
            /* When auto sync is disabled but there is clone task running,
             * applet can still get "transfer" notification, but we don't
             * rotate the icon */
            return;
        }
        trayicon_rotate (TRUE);

        if (content == NULL) {
            applet_debug ("handle empty notification\n");
            return;
        }
        GString *str = g_string_new (NULL);
        parse_key_value_pairs (content,
                               (KeyValueFunc)collect_transfer_info, str);
        trayicon_set_tip (str->str);
        g_string_free (str, TRUE);

        return;
        
    } else if (strcmp(type, "repo.deleted_on_relay") == 0) {
        snprintf (buf, sizeof(buf), "\"%s\" %s", content, _("is unsynced. \nReason: Deleted on server"));
        trayicon_notify ("Seafile", buf);
        
    } else if (strcmp(type, "sync.done") == 0) {
        /* format: repo_name \t repo_id \t description */
        char *p, *repo_name, *repo_id, *desc;
        repo_name = content;
        p = strchr(content, '\t');
        if (!p) {
            return;
        }
        *p = '\0';
        repo_id = p + 1;

        p = strchr(p + 1, '\t');
        if (!p) {
            return;
        }
        *p = '\0';
        desc = p + 1;
#ifdef __APPLE__
        char *translated_desc = g_strdup(desc);
#else
        char *translated_desc = translate_commit_desc(desc);
#endif

        memcpy (applet->last_synced_repo, repo_id, strlen(repo_id) + 1);
        snprintf (buf, sizeof(buf), "\"%s\" %s", repo_name, _("is synchronized"));
        trayicon_notify (buf, translated_desc);

        g_free (translated_desc);
        
    } else if (strcmp(type, "sync.access_denied") == 0) {
        /* format: <repo_name\trepo_id> */
        char *p = strchr(content, '\t');
        if (!p) {
            return;
        }
        *p = '\0';
        char *repo_name = content;
        char *repo_id = p + 1;

        memcpy (applet->last_synced_repo, repo_id, strlen(repo_id) + 1);
        snprintf (buf, sizeof(buf), "\"%s\" %s", repo_name, _("failed to sync. \nAccess denied to service"));
        trayicon_notify ("Seafile", buf);
    } else if (strcmp(type, "sync.quota_full") == 0) {
        /* format: <repo_name\trepo_id> */
        char *p = strchr(content, '\t');
        if (!p) {
            return;
        }
        *p = '\0';
        char *repo_name = content;
        char *repo_id = p + 1;

        memcpy (applet->last_synced_repo, repo_id, strlen(repo_id) + 1);
        snprintf (buf, sizeof(buf), "\"%s\" %s", repo_name, _("failed to sync.\nThe library owner's storage space is used up."));
        trayicon_notify ("Seafile", buf);
    }
#ifdef __APPLE__
    else if (strcmp(type, "repo.setwktree") == 0) {
        seafile_set_repofolder_icns (content);
    } else if  (strcmp(type, "repo.unsetwktree") == 0) {
        seafile_unset_repofolder_icns (content);
    }
#endif
}