rendered paste body#include <iostream>#include <windows.h>#include <curl/curl.h>#pragma comment(lib, "libcurl")#pragma comment(lib, "zlib")#pragma warning(disable: 4996)using namespace std;char* pasteSelectFile ( void );char* pasteGetShortFilePath ( char* fullPath );bool pasteFileUpload ( CURL* hCon, char* fullPath );char* pasteGetFileType ( char* filename );char* pasteGetFileName ( char* filename );const char* pasteGetFileTypeVal ( char* fileType );size_t pasteRecvData ( void *buffer, size_t size, size_t nmemb, void *userp ); void pasteAddLink ( char* filePath, char* pasteLink );void pasteClearLinks ( void );void pasteCBSet ( const char* data );char* pasteCBGet ( void );struct pasteNode{ char* filePath; char* pasteLink; pasteNode *pNext; pasteNode( void ) { filePath = 0; pasteLink = 0; pNext = 0; } bool Empty( void ) { if(pasteLink == 0 && filePath == 0) return true; return false; } void Release( void ) { delete [] pasteLink; delete [] filePath; filePath = 0; pasteLink = 0; }} pasteRoot;const char* c_cpAddressPaste = "http://pastebin.ca/";const char* c_cpAddress = "http://pastebin.ca";const char* c_cpFieldText = "content";const char* c_cpFieldTextType = "type";char cpCurrentFile[MAX_PATH];struct _sTypes{ const char* c_cpType; const char* c_cpVal;} c_cpTypes[] = { {"c", "3"}, {"cpp", "4"}, {"h", "4"}, {"hpp", "4"}, {"pl", "6"}, {"php", "5"}, {"html", "26"}, {"htm", "26"}, {"css", "24"}, {"asp", "22"}, {"xml", "15"}, {"java", "7"}, {"*", "0"}, };INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){ CURL *hCon = NULL; char *pasteFile = NULL; struct curl_slist *slist = 0; curl_global_init(CURL_GLOBAL_ALL); hCon = curl_easy_init(); slist = curl_slist_append(slist, "Expect:"); curl_easy_setopt(hCon, CURLOPT_HTTPHEADER, slist); curl_easy_setopt(hCon, CURLOPT_POST, 1); curl_easy_setopt(hCon, CURLOPT_URL, c_cpAddress); curl_easy_setopt(hCon, CURLOPT_WRITEFUNCTION, pasteRecvData); while( NULL != (pasteFile = pasteSelectFile()) ) { if(false == pasteFileUpload(hCon, pasteFile)) { MessageBoxA(NULL, "Failed to Upload File:\r\nInvalid Connectionhandle or File!", "Error", MB_OK); } } curl_slist_free_all(slist); curl_easy_cleanup(hCon); pasteClearLinks(); return 0;}char* pasteSelectFile( void ){ OPENFILENAMEA ofn = {0}; static char path[MAX_PATH+1] = {0}; ofn.lStructSize = sizeof(OPENFILENAMEA); ofn.hInstance = GetModuleHandle(NULL); ofn.lpstrFilter = "*.*\0"; ofn.lpstrFile = path; ofn.nMaxFile = MAX_PATH; ofn.lpstrTitle = "Choose File to Paste"; ofn.Flags = OFN_FILEMUSTEXIST; if(FALSE == GetOpenFileNameA(&ofn)) { return 0; } return path;}char* pasteGetFileType( char* filename ){ char *fileType; if(filename == 0) { return NULL; } fileType = strrchr(filename, '.')+1; return fileType;}char* pasteGetFileName( char* filename ){ char* fileName; if(filename == 0) { return NULL; } fileName = strtok(filename, "."); return fileName;}char* pasteGetShortFilePath( char* fullPath ){ char *shortPath = NULL; if( fullPath == 0 ) { return NULL; } shortPath = strrchr(fullPath, '\\')+1; return shortPath;}bool pasteFileUpload( CURL* hCon, char* fullPath ){ size_t uiFileSize = 0; char *shortPath = NULL, *fileType = NULL, *fileTypeVal= NULL; struct curl_httppost *post = 0, *last = 0; if(hCon == 0 || fullPath == 0) { return false; } shortPath = pasteGetShortFilePath(fullPath); fileType = pasteGetFileType(shortPath); fileTypeVal = (char*)pasteGetFileTypeVal(fileType); if(shortPath == 0 || fileType == 0 || fileTypeVal == 0) { return false; } memset(cpCurrentFile, 0x00, MAX_PATH); strncpy(cpCurrentFile, shortPath, MAX_PATH-1); curl_easy_setopt(hCon, CURLOPT_FOLLOWLOCATION, 1); curl_formadd(&post, &last, CURLFORM_COPYNAME, c_cpFieldText, CURLFORM_FILECONTENT, fullPath, CURLFORM_END); curl_formadd(&post, &last, CURLFORM_COPYNAME, c_cpFieldTextType, CURLFORM_COPYCONTENTS, fileTypeVal, CURLFORM_END); curl_easy_setopt(hCon, CURLOPT_HTTPPOST, post); curl_easy_perform(hCon); curl_formfree(post); return true;}const char* pasteGetFileTypeVal( char* fileType ){ size_t types = sizeof(c_cpTypes)/sizeof(_sTypes); for(size_t i=0; i<types; i++) { if(!strcmp(c_cpTypes[i].c_cpType, fileType)) { return c_cpTypes[i].c_cpVal; } } return c_cpTypes[types-1].c_cpVal;}size_t pasteRecvData( void *buffer, size_t size, size_t nmemb, void *userp ){ size_t pastenum = 0, i = 0, splitsize = 0; char *splitstr = "<meta http-equiv=\"refresh\" content=\"7;http://pastebin.ca/", *split = 0, *num = 0, *pasteurl = 0, *valid = (char*)buffer; split = strstr((char*)buffer, splitstr); splitsize = strlen(splitstr); if(split == NULL) { return size*nmemb; } while(split[splitsize+i] != '"') { i++; } num = new char [i+1]; memset(num, 0, i+1); strncpy(num, split+splitsize, i); pastenum = atoi(num); delete [] num; num = 0; splitsize = 8+strlen(c_cpAddressPaste)+1; pasteurl = new char [splitsize]; _snprintf(pasteurl, splitsize, "%s%ld", c_cpAddressPaste, pastenum); pasteAddLink(cpCurrentFile, pasteurl); delete [] pasteurl; return size*nmemb;}void pasteAddLink( char* filePath, char* pasteLink ){ pasteNode *current = &pasteRoot; size_t uiSize = 0; if(current->Empty() == true) { uiSize = strlen(filePath); current->filePath = new char [uiSize+1]; memset(current->filePath, 0, uiSize+1); strcpy(current->filePath, filePath); uiSize = strlen(pasteLink); current->pasteLink = new char [uiSize+1]; memset(current->pasteLink, 0, uiSize+1); strcpy(current->pasteLink, pasteLink); } else { while(current->pNext != 0) { current = current->pNext; } current->pNext = new pasteNode; current = current->pNext; uiSize = strlen(filePath); current->filePath = new char [uiSize+1]; memset(current->filePath, 0, uiSize+1); strcpy(current->filePath, filePath); uiSize = strlen(pasteLink); current->pasteLink = new char [uiSize+1]; memset(current->pasteLink, 0, uiSize+1); strcpy(current->pasteLink, pasteLink); }}void pasteClearLinks( void ){ char* pBuffer = 0; pasteNode *current = &pasteRoot, *temp; size_t uiSize = 0; bool bFirst = true; if(current->Empty()) { return; } do { uiSize = strlen(pasteCBGet())+strlen(current->pasteLink)+strlen(current->filePath)+2+2; pBuffer = new char [uiSize]; if(pBuffer == 0) { break; } memset(pBuffer, 0, uiSize); _snprintf(pBuffer, uiSize-1, "%s%s: %s\n", (pasteCBGet()==0||bFirst?"":pasteCBGet()), current->filePath, current->pasteLink); bFirst = false; pasteCBSet(pBuffer); delete [] pBuffer; pBuffer = 0; current = current->pNext; } while(current != 0); current = &pasteRoot; current->Release(); current = current->pNext; if(current == 0) { return; } do { temp = current; current = temp->pNext; temp->Release(); delete temp; } while(current != 0);}void pasteCBSet( const char* data ){ static bool bEmpty = true; char far* pBuffer; size_t uiSize = 0; HGLOBAL pCBBuffer; uiSize = strlen(data); OpenClipboard(NULL); if(bEmpty == true) { bEmpty = false; EmptyClipboard(); } pCBBuffer = GlobalAlloc(GMEM_DDESHARE, uiSize+1); pBuffer = (char far*)GlobalLock(pCBBuffer); if(pBuffer == NULL) { return; } strcpy(pBuffer, data); GlobalUnlock(pCBBuffer); SetClipboardData(CF_TEXT, pCBBuffer); CloseClipboard();}char* pasteCBGet( void ){ char* pBuffer = 0; size_t uiSize = 0; HANDLE hData; if(OpenClipboard(NULL) == FALSE) { return NULL; } hData = GetClipboardData(CF_TEXT); pBuffer = (char*)GlobalLock(hData); GlobalUnlock(hData); CloseClipboard(); return pBuffer;}