void HttpClient::Setup() { pimpl_->postHeaders_ = NULL; if ((pimpl_->postHeaders_ = curl_slist_append(pimpl_->postHeaders_, "Expect:")) == NULL) { throw OrthancException(ErrorCode_NotEnoughMemory); } pimpl_->curl_ = curl_easy_init(); if (!pimpl_->curl_) { curl_slist_free_all(pimpl_->postHeaders_); throw OrthancException(ErrorCode_NotEnoughMemory); } CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_WRITEFUNCTION, &CurlCallback)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HEADER, 0)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_FOLLOWLOCATION, 1)); #if ORTHANC_SSL_ENABLED == 1 CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_SSL_VERIFYPEER, 0)); #endif // This fixes the "longjmp causes uninitialized stack frame" crash // that happens on modern Linux versions. // http://stackoverflow.com/questions/9191668/error-longjmp-causes-uninitialized-stack-frame CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_NOSIGNAL, 1)); url_ = ""; method_ = HttpMethod_Get; lastStatus_ = HttpStatus_200_Ok; isVerbose_ = false; timeout_ = 0; }
void HttpClient::SetVerbose(bool isVerbose) { isVerbose_ = isVerbose; if (isVerbose_) { CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_VERBOSE, 1)); } else { CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_VERBOSE, 0)); } }
void NewUser(void) { FILE *file; char name[100]; char code[100]; if(users != NULL) free(users); FillUsers(); do { printf("USERNAME: "******"%s", name); }while(CheckName(name)); do { ReadCode(code); printf("CODE: %s\n", code); if(CheckCode(code)) printf("Code is already in use!\n"); else { printf("Done.\n"); break; } }while(1); if((file = fopen("USERS", "a+")) == NULL) { perror("Failed to open file!\n"); exit(1); } else { fprintf(file, "%s\t\t%s\r\n", name, code); fclose(file); } }
void HttpClient::GlobalInitialize() { CheckCode(curl_global_init(CURL_GLOBAL_DEFAULT)); }
bool HttpClient::Apply(std::string& answer) { answer.clear(); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_URL, url_.c_str())); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_WRITEDATA, &answer)); // Reset the parameters from previous calls to Apply() CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPHEADER, NULL)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPGET, 0L)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POST, 0L)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_NOBODY, 0L)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_CUSTOMREQUEST, NULL)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, NULL)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, 0)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_PROXY, NULL)); // Set timeouts if (timeout_ <= 0) { CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_TIMEOUT, 10)); /* default: 10 seconds */ CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_CONNECTTIMEOUT, 10)); /* default: 10 seconds */ } else { CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_TIMEOUT, timeout_)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_CONNECTTIMEOUT, timeout_)); } if (credentials_.size() != 0) { CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_USERPWD, credentials_.c_str())); } if (proxy_.size() != 0) { CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_PROXY, proxy_.c_str())); } switch (method_) { case HttpMethod_Get: CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPGET, 1L)); break; case HttpMethod_Post: CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POST, 1L)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPHEADER, pimpl_->postHeaders_)); break; case HttpMethod_Delete: CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_NOBODY, 1L)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_CUSTOMREQUEST, "DELETE")); break; case HttpMethod_Put: // http://stackoverflow.com/a/7570281/881731: Don't use // CURLOPT_PUT if there is a body // CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_PUT, 1L)); curl_easy_setopt(pimpl_->curl_, CURLOPT_CUSTOMREQUEST, "PUT"); /* !!! */ CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_HTTPHEADER, pimpl_->postHeaders_)); break; default: throw OrthancException(ErrorCode_InternalError); } if (method_ == HttpMethod_Post || method_ == HttpMethod_Put) { if (postData_.size() > 0) { CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, postData_.c_str())); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, postData_.size())); } else { CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDS, NULL)); CheckCode(curl_easy_setopt(pimpl_->curl_, CURLOPT_POSTFIELDSIZE, 0)); } } // Do the actual request CheckCode(curl_easy_perform(pimpl_->curl_)); long status; CheckCode(curl_easy_getinfo(pimpl_->curl_, CURLINFO_RESPONSE_CODE, &status)); if (status == 0) { // This corresponds to a call to an inexistent host lastStatus_ = HttpStatus_500_InternalServerError; } else { lastStatus_ = static_cast<HttpStatus>(status); } return (status >= 200 && status < 300); }
void __fastcall TSmallTypeForm::btnokClick(TObject *Sender) { if (!dm1->ConnectDB()) return; switch(btnidx) { case 0://do add if (!CheckEdit()) break; if (!CheckCode()) break; strsql =AnsiString("select st_code from dicsmalltype where st_code='") +edtcode->Text+"'"; if (DoQuery(dm1->Query1,strsql)) { if (!dm1->Query1->IsEmpty()) { ErrorDlg("输入了重复的代码!"); break; } } else { SetButton(1,1,1,1,0,0,1,1); break; } strsql =AnsiString("insert into dicsmalltype values('")+edtcode->Text+"','" +edtname->Text+"')"; if (DoQuery(dm1->Query1,strsql,1)) { btnref->Click(); ClearEdit(); edtcode->SetFocus(); } break; case 1: LocateRow(); break; case 2://do modify if (ListView1->SelCount==0) { InfoDlg("请先在列表中选择要修改的项次!"); break; } if (!CheckEdit()) break; if (!CheckCode()) break; strsql =AnsiString("update dicsmalltype set st_name='") +edtname->Text+"' where st_code='" +ListView1->Selected->SubItems->Strings[0]+"'"; if (DoQuery(dm1->Query1,strsql,1)) { btnref->Click(); ClearEdit(); InfoDlg("修改完成!"); } else SetButton(1,1,1,1,0,0,1,1); break; case 3://do delete if (ListView1->SelCount==0) { InfoDlg("请先在列表中选择要删除的项次!"); break; } if (AskDlg("确实要删除该项次吗?")==IDNO) break; strsql =AnsiString("delete dicsmalltype where st_code='") +ListView1->Selected->SubItems->Strings[0]+"'"; if (DoQuery(dm1->Query1,strsql,1)) { ClearEdit(); btnref->Click(); InfoDlg("删除完成!"); } else SetButton(1,1,1,1,0,0,1,1); break; } dm1->db1->Connected=false; }