static int psync_p2p_get_download_token(psync_fileid_t fileid, const unsigned char *filehashhex, uint64_t fsize, unsigned char **token, size_t *tlen){ binparam params[]={P_STR("auth", psync_my_auth), P_NUM("fileid", fileid), P_NUM("filesize", fsize), P_LSTR(PSYNC_CHECKSUM, filehashhex, PSYNC_HASH_DIGEST_HEXLEN), P_LSTR("keydata", psync_rsa_public_bin->data, psync_rsa_public_bin->datalen)}; psync_socket *api; binresult *res; const binresult *ctoken; *token=NULL; /* especially for gcc */ *tlen=0; api=psync_apipool_get(); if (unlikely_log(!api)) return PSYNC_NET_TEMPFAIL; res=send_command(api, "getfileownershiptoken", params); if (unlikely_log(!res)){ psync_apipool_release_bad(api); return PSYNC_NET_TEMPFAIL; } psync_apipool_release(api); if (unlikely_log(psync_find_result(res, "result", PARAM_NUM)->num!=0)){ psync_free(res); return PSYNC_NET_PERMFAIL; } ctoken=psync_find_result(res, "token", PARAM_STR); *token=psync_malloc(ctoken->length+1); memcpy(*token, ctoken->str, ctoken->length+1); *tlen=ctoken->length; psync_free(res); return PSYNC_NET_OK; }
int main(){ apisock *sock; binresult *res; sock=api_connect(); if (!sock){ fprintf(stderr, "Cannot connect to server\n"); return 1; } res=send_command(sock, "userinfo", P_STR("auth", "Ec7QkEjFUnzZ7Z8W2YH1qLgxY7gGvTe09AH0i7V3kX")); if (!res){ fprintf(stderr, "Command failed\n"); return 1; } print_tree(res, 0); free(res); res=send_command(sock, "diff", P_NUM("folderid", 0), P_BOOL("recursive", 1), P_STR("timeformat", "timestamp")); if (!res){ fprintf(stderr, "Command failed\n"); return 1; } print_tree(res, 0); free(res); return 0; send_command_nb(sock, "diff", P_NUM("diffid", 0)); res=get_result(sock); if (!res){ fprintf(stderr, "Command failed\n"); return 1; } print_tree(res, 0); // printf("%u %llu\n", res->type, res->num); free(res); api_close(sock); return 0; }
void DirectoryPickerDialog::showEvent(QShowEvent *) { QList<QTreeWidgetItem *> items; apisock *conn; binresult *res, *result, *rn; binresult root; QByteArray auth=app->settings->get("auth").toUtf8(); if (!(conn=app->getAPISock())){ showError("Could not connect to server. Check your Internet connection."); return; } ui->dirtree->clear(); ui->dirtree->setColumnCount(1); ui->dirtree->setHeaderLabels(QStringList("Name")); res=send_command(conn, "listfolder", P_LSTR("auth", auth.constData(), auth.size()), P_STR("filtermeta", "contents,folderid,name"), P_NUM("folderid", 0), P_BOOL("recursive", 1), P_BOOL("nofiles", 1), P_BOOL("noshares", onlyMine)); api_close(conn); result=find_res(res, "result"); if (!result){ showError("Could not connect to server. Check your Internet connection."); free(res); return; } if (result->num!=0){ showError(find_res(res, "error")->str); free(res); return; } if (showRoot){ root.type=PARAM_ARRAY; root.length=1; root.array=&rn; rn=find_res(res, "metadata"); result=&root; } else result=find_res(find_res(res, "metadata"), "contents"); items=binresToQList(result); ui->dirtree->insertTopLevelItems(0, items); ui->dirtree->sortByColumn(0, Qt::AscendingOrder); if (items.count()){ ui->dirtree->setCurrentItem(items[0]); ui->dirtree->expandItem(items[0]); } free(res); }
void DirectoryPickerDialog::newFolder() { if (!ui->dirtree->currentItem()) return; quint64 folderid=ui->dirtree->currentItem()->data(1, Qt::UserRole).toULongLong(); QString newdir=QInputDialog::getText(this, "Create Folder", "New folder name"); if (!newdir.length()) return; QByteArray auth=app->settings->get("auth").toUtf8(); QByteArray bnewdir=newdir.toUtf8(); apisock *conn; binresult *res, *result; QTreeWidgetItem *item; if (!(conn=app->getAPISock())){ showError("Could not connect to server. Check your Internet connection."); return; } res=send_command(conn, "createfolder", P_LSTR("auth", auth.constData(), auth.size()), P_LSTR("name", bnewdir.constData(), bnewdir.size()), P_NUM("folderid", folderid)); api_close(conn); result=find_res(res, "result"); if (!result){ showError("Could not connect to server. Check your Internet connection."); free(res); return; } if (result->num!=0){ showError(find_res(res, "error")->str); free(res); return; } item=new QTreeWidgetItem((QTreeWidget*)0, QStringList(newdir)); item->setData(1, Qt::UserRole, (qulonglong)find_res(find_res(res, "metadata"), "folderid")->num); ui->dirtree->currentItem()->addChild(item); ui->dirtree->sortByColumn(0, Qt::AscendingOrder); ui->dirtree->setCurrentItem(item); free(res); }
void RegisterWindow::doRegister(){ if (!ui->accepttos->checkState()){ setError("Registration only possible upon acceptance of terms."); return; } if (ui->password->text().length()<6){ setError("Password too short - minimum 6 characters."); return; } if (ui->password->text()!=ui->confirmpassword->text()){ setError("Password confirmation does not match."); return; } QByteArray email=ui->email->text().toUtf8(); QByteArray password=ui->password->text().toUtf8(); apisock *conn; binresult *res, *result; QByteArray err; quint64 type=0; #if defined(Q_OS_WIN) type=5; #elif defined(Q_OS_LINUX) type=7; #elif defined(Q_OS_MAC) type=6; #endif if (!(conn=app->getAPISock())){ setError("Connection to server failed."); return; } res=send_command(conn, "register", P_STR("termsaccepted", "yes"), P_LSTR("mail", email.constData(), email.size()), P_LSTR("password", password.constData(), password.size()), P_NUM("os", type)); result=find_res(res, "result"); if (!result){ setError("Connection to server failed."); free(res); api_close(conn); return; } if (result->num!=0){ setError(find_res(res, "error")->str); free(res); api_close(conn); return; } res=send_command(conn, "userinfo", P_LSTR("username", email.constData(), email.size()), P_LSTR("password", password.constData(), password.size()), P_BOOL("getauth", 1)); api_close(conn); result=find_res(res, "result"); if (!result){ setError("Connection to server failed."); free(res); return; } if (result->num!=0){ setError(find_res(res, "error")->str); free(res); return; } if (!app->userLogged(res, err, false)) setError(err); else{ setError(""); ui->password->clear(); ui->confirmpassword->clear(); hide(); } free(res); }