diff options
Diffstat (limited to 'plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp')
-rw-r--r-- | plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp b/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp new file mode 100644 index 0000000000..9b975b7a6e --- /dev/null +++ b/plugins/SendScreenshotPlus/src/CSendHost_uploadpie.cpp @@ -0,0 +1,104 @@ +/* + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2014 Miranda NG project (http://miranda-ng.org) + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. +*/ +#include "global.h" + +CSendHost_UploadPie::CSendHost_UploadPie(HWND Owner, MCONTACT hContact, bool bAsync, int expire) + : m_expire(expire), CSend(Owner,hContact,bAsync) +{ + m_EnableItem=SS_DLG_DESCRIPTION|SS_DLG_AUTOSEND|SS_DLG_DELETEAFTERSSEND; + m_pszSendTyp=LPGENT("Image upload"); +} + +CSendHost_UploadPie::~CSendHost_UploadPie() +{} + +//--------------------------------------------------------------------------- +int CSendHost_UploadPie::Send() +{ + if(!hNetlibUser){ /// check Netlib + Error(SS_ERR_INIT, m_pszSendTyp); + Exit(ACKRESULT_FAILED); + return !m_bAsync; + } + ZeroMemory(&m_nlhr, sizeof(m_nlhr)); + char* tmp; tmp=mir_t2a(m_pszFile); + HTTPFormData frm[]={ + {"MAX_FILE_SIZE",HTTPFORM_INT(3145728)},// ?? + {"upload",HTTPFORM_INT(1)},// ?? + {"uploadedfile",HTTPFORM_FILE(tmp)}, + {"expire",HTTPFORM_INT(1)},// 30m + //{"expire",HTTPFORM_INT(2,},// 1h + //{"expire",HTTPFORM_INT(3)},// 6h + //{"expire",HTTPFORM_INT(4)},// 1d + //{"expire",HTTPFORM_INT(5)},// 1w + //{"x",HTTPFORM_INT(130)},// ?? + //{"y",HTTPFORM_INT(17)},// ?? + }; + int error=HTTPFormCreate(&m_nlhr,REQUEST_POST,"http://uploadpie.com/",frm,sizeof(frm)/sizeof(HTTPFormData)); + mir_free(tmp); + if(error) + return !m_bAsync; + /// start upload thread + if(m_bAsync){ + mir_forkthread(&CSendHost_UploadPie::SendThread, this); + return 0; + } + SendThread(this); + return 1; +} + +void CSendHost_UploadPie::SendThread(void* obj) +{ + CSendHost_UploadPie* self=(CSendHost_UploadPie*)obj; + //send DATA and wait for m_nlreply + NETLIBHTTPREQUEST* reply=(NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION,(WPARAM)hNetlibUser,(LPARAM)&self->m_nlhr); + self->HTTPFormDestroy(&self->m_nlhr); + if(reply){ + if(reply->resultCode>=200 && reply->resultCode<300){ + reply->pData[reply->dataLength]='\0';/// make sure its null terminated + + OutputDebugStringA(reply->pData); + char* url=reply->pData; + do{ + char* pos; + if((url=strstr(url,"http://uploadpie.com/"))){ + for(pos=url+21; (*pos>='0'&&*pos<='9') || (*pos>='a'&&*pos<='z') || (*pos>='A'&&*pos<='Z') || *pos=='_' || *pos=='-' || *pos=='"' || *pos=='\''; ++pos){ + if(*pos=='"' || *pos=='\'') break; + } + if(*pos=='"' || *pos=='\''){ + *pos='\0'; + break; + } + ++url; + } + }while(url); + if(url){ + mir_free(self->m_URL), self->m_URL=mir_strdup(url); + self->svcSendMsgExit(url); return; + }else{/// check error mess from server + TCHAR* err=mir_a2t(reply->pData); + self->Error(_T("%s"),err); + mir_free(err); + } + }else{ + self->Error(LPGENT("Upload server did not respond timely.")); + } + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT,0,(LPARAM)reply); + }else{ + self->Error(SS_ERR_INIT, self->m_pszSendTyp); + } + self->Exit(ACKRESULT_FAILED); +} |