diff options
author | sappho <sappho@sappho.io> | 2023-07-14 07:19:14 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-14 07:19:14 -0400 |
commit | 7b92e4acf6dea29348efeb4c0cc89e3071aee56e (patch) | |
tree | 069032a9c6eb3ccc8f0089d8bbbb9ffe8ccacdd3 /curlthread.cpp | |
parent | 581d1e994692f9ce4e5d8071e8edba1e71412bac (diff) |
ci fixes and repo cleanup + small tweaks and first release (#2)v2.0.0-beta
* Update docker_build.yml
* Update docker_build.yml
* Update docker_build.yml
* attempt to lint
* use tags
* Update docker_build.yml
* reorganize repo
* correct typo with build dir
* hacky chmod/chown for docker builds
* more hacks for chmod
* try to hack docker to work again
* fix invalid syntax
* remove extension in repo, remove spaces, fixup gitignore
* twiddle around with making releases with commits
* more ci testing to use non deprecated actions
* Update docker_build.yml
* more ci twiddling (ugh)
* more lint and run the actual job now
* lint more and use deb slim
* autogen rel notes (?)
* fixup bad quotes
* sigh. fix quotes again
* save beta autotagging for a later date
* gitignore
* fix so users don't use removed hash funcs
* add max dbg info to ext
* update versionings
Diffstat (limited to 'curlthread.cpp')
-rw-r--r-- | curlthread.cpp | 315 |
1 files changed, 0 insertions, 315 deletions
diff --git a/curlthread.cpp b/curlthread.cpp deleted file mode 100644 index 71197ca..0000000 --- a/curlthread.cpp +++ /dev/null @@ -1,315 +0,0 @@ -#include "curlthread.h" -#include <string.h> - -static int wait_on_socket(curl_socket_t sockfd, bool for_recv, long timeout_ms) -{ - struct timeval tv; - fd_set infd, outfd, errfd; - int res; - tv.tv_sec = timeout_ms / 1000; - tv.tv_usec= (timeout_ms % 1000) * 1000; - - FD_ZERO(&infd); - FD_ZERO(&outfd); - FD_ZERO(&errfd); - - FD_SET(sockfd, &errfd); /* always check for error */ - - if(for_recv) - { - FD_SET(sockfd, &infd); - } else { - FD_SET(sockfd, &outfd); - } - /* select() returns the number of signalled sockets or -1 */ - res = select(sockfd + 1, &infd, &outfd, &errfd, &tv); - return res; -} - - -cURLThread::cURLThread(cURLHandle *_handle, cURLThread_Type _type): -waiting(false),handle(_handle),type(_type),event(threader->MakeEventSignal()), -recv_buffer(NULL),recv_buffer_size(1024),_current_recv_buffer_size(0),last_iolen(0) - -{ - assert((type > cURLThread_Type_NOTHING && type < cURLThread_Type_LAST)); - assert((event != NULL)); - handle->running = true; - handle->thread = this; -} - -cURLThread::~cURLThread() -{ - waiting = false; - if(event != NULL) - { - event->DestroyThis(); - event = NULL; - } - if(recv_buffer != NULL) - { - delete [] recv_buffer; - recv_buffer = NULL; - } - - g_cURLManager.RemovecURLThread(this); -} - -cURLHandle *cURLThread::GetHandle() -{ - return handle; -} - -cURLThread_Type cURLThread::GetRunType() -{ - return type; -} - -void cURLThread::EventSignal() -{ - assert((event != NULL)); - event->Signal(); -} - -void cURLThread::EventWait() -{ - assert((event != NULL)); - waiting = true; - event->Wait(); - waiting = false; -} - -bool cURLThread::IsWaiting() -{ - return waiting; -} - -char *cURLThread::GetReceiveBuffer() -{ - return recv_buffer; -} - -void cURLThread::SetRecvBufferSize(unsigned int size) -{ - if(size == 0) - size = 1024; - else if(size > (64*1024*1024)) // 64MB - size = (64*1024*1024); - - recv_buffer_size = size; -} - -void cURLThread::SetSenRecvAction(SendRecv_Act act) -{ - assert((act > SendRecv_Act_NOTHING && act < SendRecv_Act_LAST)); - send_recv_act = act; -} - -void cURLThread::RunThread_Perform() -{ - g_cURLManager.LoadcURLOption(handle); - - if(handle->lasterror != CURLE_OK) - return; - - if((handle->lasterror = curl_easy_perform(handle->curl)) != CURLE_OK) - return; - - handle->lasterror = curl_easy_getinfo(handle->curl, CURLINFO_LASTSOCKET, &handle->sockextr); -} - -static void curl_send_FramAction(void *data) -{ - if(data == NULL) - return; - - cURLThread *thread = (cURLThread*)data; - cURLHandle *handle = thread->GetHandle(); - - IPluginFunction *pFunc = handle->callback_Function[cURL_CallBack_SEND]; - assert((pFunc != NULL)); - if(pFunc != NULL) - { - cell_t result; - pFunc->PushCell(handle->hndl); - pFunc->PushCell(handle->lasterror); - pFunc->PushCell(thread->last_iolen); - pFunc->PushCell(handle->UserData[UserData_Type_Send_Recv]); - pFunc->Execute(&result); - thread->SetSenRecvAction((SendRecv_Act)result); - } - - thread->EventSignal(); -} - -static void curl_recv_FramAction(void *data) -{ - if(data == NULL) - return; - - cURLThread *thread = (cURLThread*)data; - cURLHandle *handle = thread->GetHandle(); - - IPluginFunction *pFunc = handle->callback_Function[cURL_CallBack_RECV]; - assert((pFunc != NULL)); - if(pFunc != NULL) - { - cell_t result; - pFunc->PushCell(handle->hndl); - pFunc->PushCell(handle->lasterror); - pFunc->PushStringEx(thread->GetReceiveBuffer(), thread->last_iolen, SM_PARAM_STRING_COPY|SM_PARAM_STRING_BINARY, 0); - pFunc->PushCell(thread->last_iolen); - pFunc->PushCell(handle->UserData[UserData_Type_Send_Recv]); - pFunc->Execute(&result); - thread->SetSenRecvAction((SendRecv_Act)result); - } - thread->EventSignal(); -} - -void cURLThread::RunThread_Send_Recv() -{ - assert((handle->sockextr != INVALID_SOCKET)); - - if(handle->sockextr == INVALID_SOCKET || event == NULL) - { - handle->lasterror = CURLE_SEND_ERROR; - return; - } - -/* Select Action */ -select_action: - if(send_recv_act == SendRecv_Act_GOTO_SEND) - goto act_send; - else if(send_recv_act == SendRecv_Act_GOTO_RECV) - goto act_recv; - else if(send_recv_act == SendRecv_Act_GOTO_WAIT) - goto act_wait; - else if(send_recv_act == SendRecv_Act_GOTO_SEND_NO_WAIT) - goto act_send_no_wait; - else if(send_recv_act == SendRecv_Act_GOTO_RECV_NO_WAIT) - goto act_recv_no_wait; - else - goto act_end; - - -/* Send Action */ -act_send: - if(!wait_on_socket(handle->sockextr, false, handle->send_timeout)) - { - handle->lasterror = CURLE_OPERATION_TIMEDOUT; - goto sm_send_frame; - } - -act_send_no_wait: - if(handle->send_buffer.length() == 0) - { - handle->lasterror = CURLE_SEND_ERROR; - goto sm_send_frame; - } - - handle->lasterror = curl_easy_send(handle->curl, handle->send_buffer.data(), handle->send_buffer.length(), &last_iolen); - handle->send_buffer.clear(); - - // put res to frame, let frame do action -sm_send_frame: - smutils->AddFrameAction(curl_send_FramAction, this); - - EventWait(); - - if(g_cURL_SM.IsShutdown()) - goto act_end; - - goto select_action; - - -/* Recv Action */ -act_recv: - if(!wait_on_socket(handle->sockextr, true, handle->recv_timeout)) - { - handle->lasterror = CURLE_OPERATION_TIMEDOUT; - goto sm_recv_frame; - } - -act_recv_no_wait: - if(_current_recv_buffer_size != recv_buffer_size || recv_buffer == NULL) - { - if(recv_buffer != NULL) - { - delete [] recv_buffer; - recv_buffer = NULL; - } - _current_recv_buffer_size = recv_buffer_size; - recv_buffer = new char[_current_recv_buffer_size+1]; - memset(recv_buffer, 0, _current_recv_buffer_size+1); - } - - handle->lasterror = curl_easy_recv(handle->curl, recv_buffer, _current_recv_buffer_size, &last_iolen); - -sm_recv_frame: - smutils->AddFrameAction(curl_recv_FramAction, this); - goto act_wait; - - -/* Wait Action */ -act_wait: - if(g_cURL_SM.IsShutdown()) - goto act_end; - - EventWait(); - - if(g_cURL_SM.IsShutdown()) - goto act_end; - goto select_action; // select action again - - - -/* End Action */ -act_end: - return; -} - - -void cURLThread::RunThread(IThreadHandle *pHandle) -{ - if(type == cURLThread_Type_PERFORM) - { - RunThread_Perform(); - } else if(type == cURLThread_Type_SEND_RECV) { - RunThread_Send_Recv(); - } -} - - -static void cUrl_Thread_Finish(void *data) -{ - if(data == NULL) - return; - - cURLThread *thread = (cURLThread*)data; - cURLHandle *handle = thread->GetHandle(); - - IPluginFunction *pFunc = handle->callback_Function[cURL_CallBack_COMPLETE]; - assert((pFunc != NULL)); - if(pFunc != NULL) - { - pFunc->PushCell(handle->hndl); - pFunc->PushCell(handle->lasterror); - pFunc->PushCell(handle->UserData[UserData_Type_Complete]); - pFunc->Execute(NULL); - } - - thread->EventSignal(); -} - -void cURLThread::OnTerminate(IThreadHandle *pHandle, bool cancel) -{ - handle->running = false; - if(!g_cURL_SM.IsShutdown()) - { - smutils->AddFrameAction(cUrl_Thread_Finish, this); - - EventWait(); - } - delete this; -} - |