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; }
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); } */ }
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); }
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 }