Beispiel #1
0
BOOL CSVPNet::CheckUpdaterExe(CString szFileVerHash, CString szPath){
	FILE* stream_updater_exe;
	CString szTmpFilename = this->svpToolBox.getTmpFileName();
	if ( _wfopen_s( &stream_updater_exe, szTmpFilename, _T("wb") ) != 0){
		return 0; //input file open error
	}
	CURL *curl;
	CURLcode res;
	CString szPostPerm;
  szPostPerm.Format(_T( "branch=updater%s&current=%s" ), BRANCHVER, szFileVerHash);
	int rret = 0;
	curl = curl_easy_init();
	if(curl) {
		long respcode;

		this->SetCURLopt(curl);

		curl_easy_setopt(curl, CURLOPT_URL, GetUrlByType('upda' , iTryID));

		int iDescLen = 0;
		char* szPostFields = svpToolBox.CStringToUTF8(szPostPerm, &iDescLen) ;
		curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (void *)szPostFields);
		
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)stream_updater_exe);

		res = curl_easy_perform(curl);
		if(res == 0){
			curl_easy_getinfo(curl,CURLINFO_RESPONSE_CODE, &respcode);

			if(respcode == 200){
				//good to go
				rret = 1;
				
			}else{
				//error
				SVP_LogMsg(_T("None Update Required For Updater"));
			}
		}else{
			//error
			SVP_LogMsg5(_T("HTTP connection error %d %s ") , res, CStringW(curl_easy_strerror(res))); //TODO handle this
		}
		curl_easy_cleanup(curl);
	}
	fclose(stream_updater_exe);
	if (rret){
		
		if ( this->svpToolBox.unpackGZfile( szTmpFilename , szPath) == 0 ){	
			SVP_LogMsg(_T("Copy Updater.exe Sucesssed"));
		}else{
			SVP_LogMsg(_T("Copy Updater.exe Failed"));
			rret = 0;
		}
	}
	return rret;
}
Beispiel #2
0
int CSVPNet::WetherNeedUploadSub(CString fnVideoFilePath, CString szFileHash,CString fnSubHash, int iDelayMS){
	CURL *curl;
	CURLcode res;
	CString szPostPerm ;
	szPostPerm.Format(_T( "pathinfo=%s&filehash=%s&subhash=%s&subdelay=%d" ) , fnVideoFilePath ,szFileHash , fnSubHash, iDelayMS);
	
	int rret = -1;
	curl = curl_easy_init();
	if(curl) {
		long respcode;

		this->SetCURLopt(curl);

		curl_easy_setopt(curl, CURLOPT_URL,  GetUrlByType('upsb', iTryID));

		int iDescLen = 0;
		char* szPostFields = svpToolBox.CStringToUTF8(szPostPerm, &iDescLen) ;
		curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (void *)szPostFields);

		res = curl_easy_perform(curl);
		if(res == 0){
			curl_easy_getinfo(curl,CURLINFO_RESPONSE_CODE, &respcode);

			if(respcode == 200){
				//good to go // continues to upload sub
				rret = 1;
			}if(respcode == 404){
				//error
				rret = 0;
				SVP_LogMsg(_T("Already Have same sub in databases"));
			}
		}else{
			//error
			SVP_LogMsg5(_T("HTTP connection error %d %s ") , res, CStringW(curl_easy_strerror(res))); //TODO handle this
		}
		curl_easy_cleanup(curl);
	}
	return rret;
}
Beispiel #3
0
int CSVPNet::QuerySubByVideoPathOrHash_STL(std::wstring szFilePath,
                                       std::wstring szFileHash,
                                       std::wstring szVHash,
                                       std::wstring szLang)
{
  CURL *curl;
  CURLcode res;
  int ret = 0;
  std::wstring szPostPerm = L"pathinfo=" + szFilePath + L"&filehash="
    + szFileHash + L"&vhash=" + szVHash + L"&lang=" + szLang + L"&shortname="
    + svpToolBox.GetShortFileNameForSearch_STL(szFilePath);

  struct curl_httppost *formpost=NULL;
  struct curl_httppost *lastptr=NULL;


  curl_global_init(CURL_GLOBAL_ALL);
  char* szTerm2;
  char* szTerm3;
  int iDescLen = 0;
  szTerm2 = svpToolBox.CStringToUTF8(szFilePath.c_str(), &iDescLen);
  curl_formadd(&formpost,	&lastptr, CURLFORM_COPYNAME, "pathinfo", CURLFORM_COPYCONTENTS, szTerm2,CURLFORM_END);

  szTerm3 = svpToolBox.CStringToUTF8(szFileHash.c_str(), &iDescLen);
  curl_formadd(&formpost,	&lastptr, CURLFORM_COPYNAME, "filehash", CURLFORM_COPYCONTENTS, szTerm3,CURLFORM_END);

  szVHash = genVHash(szTerm2, szTerm3, uniqueIDHash);


  free(szTerm2);
  free(szTerm3);

  if (!szVHash.empty())
  {
    szTerm2 = svpToolBox.CStringToUTF8(szVHash.c_str(), &iDescLen);
    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "vhash", CURLFORM_COPYCONTENTS, szTerm2,CURLFORM_END);
    free(szTerm2);
  }

  AppSettings& s = AfxGetAppSettings();
  std::wstring szSVPSubPerf = (LPCTSTR)s.szSVPSubPerf;
  if (!szSVPSubPerf.empty())
  {
    szTerm2 = svpToolBox.CStringToUTF8(szSVPSubPerf.c_str(), &iDescLen);
    curl_formadd(&formpost,	&lastptr, CURLFORM_COPYNAME, "perf", CURLFORM_COPYCONTENTS, szTerm2,CURLFORM_END);
    free(szTerm2);
  }

  if (!szLang.empty())
  {
    szTerm2 = svpToolBox.CStringToUTF8(szLang.c_str(), &iDescLen);
    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "lang", CURLFORM_COPYCONTENTS, szTerm2,CURLFORM_END);
    free(szTerm2);
  }

  szTerm2 = svpToolBox.CStringToUTF8(svpToolBox.GetShortFileNameForSearch_STL(szFilePath).c_str(), &iDescLen);
  curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "shortname", CURLFORM_COPYCONTENTS, szTerm2,CURLFORM_END);
  free(szTerm2);

  FILE *stream_http_recv_buffer = svpToolBox.getTmpFileSteam();
  if (!stream_http_recv_buffer)
  {
    SVP_LogMsg(_T("TmpFile Creation for http recv buff fail")); //// TODO: 1. warning!! OR switch to memfile system
    return -1;
  }
  int err = 0;


  curl = curl_easy_init();
  if (curl)
  {
    long respcode;
    wchar_t szFailMsg[1024];

    SetCURLopt(curl);

    curl_easy_setopt(curl, CURLOPT_URL, GetUrlByType('sapi', iTryID));
    //curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION , &(this->handleSubQuery));
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)stream_http_recv_buffer);
    //int iDescLen = 0;
    //char* szPostFields = svpToolBox.CStringToUTF8(szPostPerm, &iDescLen) ;
    //curl_easy_setopt(curl, CURLOPT_POSTFIELDS, (void *)szPostFields);
    //curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, iDescLen);
    res = curl_easy_perform(curl);
    if (res == 0)
    {
      curl_easy_getinfo(curl,CURLINFO_RESPONSE_CODE, &respcode);
      //double contentlength;
      //curl_easy_getinfo(curl,CURLINFO_SIZE_DOWNLOAD, &contentlength);
      //SVP_LogMsg5(L" contentlength %f", contentlength);
      if (respcode == 200)
      {
        //good to go
        //SVP_LogMsg(_T("字幕已经找到,正在处理..."), 31);
        ret = 1;
      }
      else
      {
        //error
        SVP_LogMsg5(_T("HTTP return code is not 200 but %d") , respcode);
        err = 1;
      }
    }
    else
    {
      //error
      LONG l_oserr = 0;
      curl_easy_getinfo(curl,CURLINFO_OS_ERRNO,&l_oserr);
      err = 2;
      swprintf_s(szFailMsg, 1024, L"%s", CStringW(curl_easy_strerror(res)));
      //szFailMsg.Format(L"%s",CStringW(curl_easy_strerror(res)));
      if(!lstrcmp(szFailMsg, L"Couldn't connect to server"));
        lstrcat(szFailMsg, ResStr(IDS_LOG_MSG_SVPSUB_PLEASE_CHECK_FIREWALL));

      SVP_LogMsg5(_T("HTTP connection error  %s %d"), szFailMsg, l_oserr); //TODO handle this
    }

    /* always cleanup */
    curl_easy_cleanup(curl);

    //free(szPostFields);

    //if not error, process data
    if (ret)
    {
      int extErr  = ExtractDataFromAiSubRecvBuffer_STL(szFilePath, stream_http_recv_buffer);
      if (extErr && extErr != -2)
      { // -2 if there is none match subtile
        SVP_LogMsg(_T("Error On Extract DataFromAiSubRecvBuffer ")); //TODO handle this
        err = 3;
      }
    }
    else
    {
      wchar_t szMsg[1024];
      swprintf_s(szMsg, 1024, ResStr(IDS_LOG_MSG_SVPSUB_NETWORK_FAIL), szFailMsg);
      SVP_LogMsg(szMsg);//,31
      m_lastFailedMsg = szMsg;
      err = 4;
    }
    /*
    if (this->mainBufferSize > 0){
    char statCode = this->mainBuffer[0];
    if(statCode <= 0){
    //error handle
    }else{
    //handSubFiles

    }

    }
    if (this->mainBuffer){
    free(this->mainBuffer);
    }*/
  }

  //this->mainBuffer = NULL;
  //this->mainBufferSize = 0;
  fclose(stream_http_recv_buffer);

  return err;
}
Beispiel #4
0
int CSVPNet::UploadSubFileByVideoAndHash(std::wstring fnVideoFilePath,
                                         std::wstring szFileHash,
                                         std::wstring szSubHash,
                                         std::vector<std::wstring>* fnSubPaths,
                                         int iDelayMS,
                                         std::vector<std::wstring>* szaPostTerms)
{
  CURL *curl;
  CURLcode res;
  //CString szPostPerm = _T( "pathinfo=" ) + fnVideoFilePath + _T("&filehash=") + szFileHash ;
  int iTotalFiles = fnSubPaths -> size();
  SVP_LogMsg(_T("Upload Begin"));
  struct curl_httppost *formpost = NULL;
  struct curl_httppost *lastptr  = NULL;
  char errorbuf[CURL_ERROR_SIZE];

  curl_global_init(CURL_GLOBAL_ALL);

  char* szTerm2;
  char* szTerm3;
  int iDescLen = 0;

  szTerm2 = svpToolBox.CStringToUTF8(fnVideoFilePath.c_str(), &iDescLen);
  curl_formadd(&formpost,	&lastptr, CURLFORM_COPYNAME, "pathinfo",
    CURLFORM_COPYCONTENTS, szTerm2,CURLFORM_END);
  free(szTerm2);

  szTerm2 = svpToolBox.CStringToUTF8(szSubHash.c_str(), &iDescLen);
  curl_formadd(&formpost,	&lastptr, CURLFORM_COPYNAME, "subhash",
    CURLFORM_COPYCONTENTS, szTerm2,CURLFORM_END);
  free(szTerm2);

  szTerm3 = svpToolBox.CStringToUTF8(szFileHash.c_str(), &iDescLen);
  curl_formadd(&formpost,	&lastptr, CURLFORM_COPYNAME, "filehash",
    CURLFORM_COPYCONTENTS, szTerm3,CURLFORM_END);
  free(szTerm3);

  std::wstring szVHash = (LPCTSTR)genVHash(szTerm2, szTerm3, uniqueIDHash);
  if (!szVHash.empty())
  {
    szTerm2 = svpToolBox.CStringToUTF8(szVHash.c_str(), &iDescLen);
    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "vhash",
      CURLFORM_COPYCONTENTS, szTerm2,CURLFORM_END);
    free(szTerm2);
  }

  szTerm2 = (char*)malloc(64);
  _itoa_s(iDelayMS , szTerm2, 64, 10);
  curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "subdelay",
    CURLFORM_COPYCONTENTS, szTerm2, CURLFORM_END);
  free(szTerm2);


  for (int i = 0; i < fnSubPaths -> size(); i++)
  {
    char szFname[22];
    /* Fill in the file upload field */
    std::wstring szgzFile = svpToolBox.getSameTmpName(fnSubPaths -> at(i).c_str()) ;
    SVP_LogMsg(_T("Gziping ") +  CString(fnSubPaths -> at(i).c_str()) +
      _T(" to ") + szgzFile.c_str());
    svpToolBox.packGZfile(fnSubPaths -> at(i).c_str(), szgzFile.c_str());

    szTerm2 = svpToolBox.CStringToUTF8(szgzFile.c_str(), &iDescLen, CP_ACP);
    //SVP_LogMsg(fnSubPaths->GetAt(i));
    sprintf_s(szFname, 22, "subfile[%d]", i);
    curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, szFname,
      CURLFORM_FILE, szTerm2,CURLFORM_END);
    free(szTerm2);
  }
  int retx = -1;

  curl = curl_easy_init();
  if (curl)
  {
    long respcode;
    SetCURLopt(curl);
    curl_easy_setopt(curl,  CURLOPT_ERRORBUFFER, errorbuf );
    curl_easy_setopt(curl, CURLOPT_URL,  GetUrlByType('upsb',iTryID));

    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

    res = curl_easy_perform(curl);
    if (res == 0)
    {
      curl_easy_getinfo(curl,CURLINFO_RESPONSE_CODE, &respcode);
      if (respcode == 200)
      {
        //good to go // continues to upload sub
        retx = 0;
        SVP_LogMsg(ResStr(IDS_LOG_MSG_SVPSUB_UPLOAD_FINISHED), 31);
      }
      else if (respcode == 404)
      {
        //error
        retx = 0;
        SVP_LogMsg(_T("Already Have same sub in databases"));
      }
    }
    else
      //error
      SVP_LogMsg5(_T("HTTP connection error %d %s ") , res,
        CStringW(curl_easy_strerror(res))); //TODO handle this
    curl_easy_cleanup(curl);
  }
  /* then cleanup the formpost chain */
  curl_formfree(formpost);
  return retx;
}
Beispiel #5
0
int main(int argc, char* argv[])
{
    if (argc!=2) {
        printf("Usage:GetSubtitle videopath\n");
        return 0;
    }

    printf("Please wait...\n");
	
    setlocale(LC_ALL,"");
	
    SubTransFormat SubTF;

    char* strfilepath=argv[1];


    std::wstring filepath=MutliByte2WideChar(strfilepath);
    std::wstring filehash=SubTF.ComputerFileHash_STL(strfilepath);
	std::wstring shortname= SubTF.GetShortFileNameForSearch(filepath);
	        


    char* strfilehash=WideChar2MultiByte(filehash.c_str());
    char* strshortname=WideChar2MultiByte(shortname.c_str());

    std::wstring uniqueIDHash2=SubTF.genVHash(strfilepath,strfilehash);
    
    char* struniqueIDHash2=WideChar2MultiByte(uniqueIDHash2.c_str());
    
    printf("hash:%s\nshortname:%s\nuniqueIDHash:%s\n",strfilehash,strshortname,struniqueIDHash2);
	

	struct curl_httppost *formpost=NULL;
	struct curl_httppost *lastptr=NULL;
    char* form;

	form=WideChar2MultiByte(filepath.c_str());
    curl_formadd(&formpost,	&lastptr, CURLFORM_COPYNAME, "pathinfo", CURLFORM_COPYCONTENTS, form,CURLFORM_END);
	free(form);

    form=WideChar2MultiByte(filehash.c_str());
	curl_formadd(&formpost,	&lastptr, CURLFORM_COPYNAME, "filehash", CURLFORM_COPYCONTENTS, form,CURLFORM_END);
    free(form);

	form=WideChar2MultiByte(uniqueIDHash2.c_str());
	curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "vhash", CURLFORM_COPYCONTENTS, form,CURLFORM_END);
	free(form);
	

    form=WideChar2MultiByte(shortname.c_str());
	curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "shortname", CURLFORM_COPYCONTENTS, form,CURLFORM_END);
    free(form);



    CURL* curl = curl_easy_init();
	SetCURLopt(curl);

    char url[100];

    char filename[L_tmpnam];
    tmpnam(filename);

	FILE* fp=fopen(filename,"wb+");

    //FILE* fp=tmpfile();
    if(fp==NULL) return 0;
    
    printf("Searching for subtitles\n\n");

	for (int i=1;i<=7;i++)
	{		

        GetUrlByType('sapi',i,url);
		curl_easy_setopt(curl, CURLOPT_URL, url);
		
		curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
		

        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        CURLcode res = curl_easy_perform(curl);
        if (res==0)
        {
			int respcode=0;
			curl_easy_getinfo(curl,CURLINFO_RESPONSE_CODE, &respcode);
			if (respcode==200)
			{
                ExtractDataFromAiSubRecvBuffer_STL(fp);
			}
			break;
        }
		else
		{
			long l_oserr = 0;
			curl_easy_getinfo(curl,CURLINFO_OS_ERRNO,&l_oserr);
			printf(curl_easy_strerror(res));
		}

	}
	curl_easy_cleanup(curl);


	std::wstring szSubFilePath;
	  for (int i = 0; i < toolbox.szaSubTmpFileList.size(); i++)
  {
    szSubFilePath = toolbox.getSubFileByTempid_STL(i,strfilepath);
    if (szSubFilePath == L"EXIST") printf("\nThe same subtitle already existed!\n");

    else if (!szSubFilePath.empty())
	printf("\nSubtitle downloaded to %s\n\n",WideChar2MultiByte(szSubFilePath.c_str()));

        else
         printf("\nFail to get sub file\n");
        
  }
      return 0;
  }