亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mfccddb.cpp

?? MfcCDDB v1.11 A freeware MFC class to support access to CDDB servers Welcome to MfcCDDB, a collectio
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/*
Module : MfcCDDB.CPP
Purpose: Defines the implementation for an MFC class to wrap access to CDDB
Created: PJN / 24-02-1999
History: PJN / 19-05-1999 1. Added support for MOTD (Message of the Day)
                          2. Added support for submit
                          3. Fixed a number of places where calling the TRACE
                          function was causing an access violation
                          4. Fixed a bug in GetErrorMessage which was causing
                          SDK errors to return the string "The operation completed successfully"
         PJN / 14-07-1999 1. Fixed two potential access violations in the CCDDB::ReadResponse function.

Copyright (c) 1999 by PJ Naughter.  
All rights reserved.

*/



/////////////////////////////////  Includes  //////////////////////////////////

#include "stdafx.h"
#include <afxpriv.h>
#include <mmsystem.h>
#include "MfcCDDB.h"




//////////////////////////////// Statics / Macros /////////////////////////////

const DWORD READ_RESPONSE_QUERY = 1;
const DWORD READ_RESPONSE_SUBMIT = 2;

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif




////////////////////////////////// Implementation /////////////////////////////

CCDDBSite::CCDDBSite(BOOL bRetrieve)
{
  m_nPort = 80;
  m_bNorthing = TRUE;
  m_nLatitudeMinutes = 0;
  m_bEasting = TRUE;
  m_nLongitudeMinutes = 0;
  if (bRetrieve)
    m_sAddress = _T("/~cddb/cddb.cgi");
  else
    m_sAddress = _T("/~cddb/submit.cgi");
}

CCDDBSite::CCDDBSite(const CCDDBSite& site)
{
  *this = site;
}

CCDDBSite& CCDDBSite::operator=(const CCDDBSite& site)
{
  m_sSite = site.m_sSite;
  m_nPort = site.m_nPort;
  m_sAddress = site.m_sAddress;
  m_bNorthing = site.m_bNorthing;
  m_nLatitudeMinutes = site.m_nLatitudeMinutes;
  m_bEasting = site.m_bEasting;
  m_nLongitudeMinutes = site.m_nLongitudeMinutes;
  m_sDescription = site.m_sDescription;
  return *this;
}

BOOL CCDDBSite::Parse(LPSTR pszLine)
{
  LPSTR pszField = pszLine;

  //Get the site name
  LPSTR pszEnd = pszField;
  while (pszEnd[0] != ' ' && pszEnd[0] != '\0')
    ++pszEnd;
  if (pszEnd[0] == '\0')
    return FALSE;
  pszEnd[0] = '\0';
  m_sSite = pszField;
  
  //skip over the whitespace
  pszField = ++pszEnd;
  while (pszField[0] == ' ' && pszField[0] != '\0')
    ++pszField;
  if (pszField[0] == '\0')
    return FALSE;

  //Get the protocol
  pszEnd = pszField;
  while (pszEnd[0] != ' ' && pszEnd[0] != '\0')
    ++pszEnd;
  if (pszEnd[0] == '\0')
    return FALSE;
  pszEnd[0] = '\0';
  CString sProtocol = pszField;
    
  //If the protocol is not http, then ignore it
  if (sProtocol.CompareNoCase(_T("http")) != 0)
    return FALSE;

  //skip over the whitespace
  pszField = ++pszEnd;
  while (pszField[0] == ' ' && pszField[0] != '\0')
    ++pszField;
  if (pszField[0] == '\0')
    return FALSE;

  //Get the port number
  pszEnd = pszField;
  while (pszEnd[0] != ' ' && pszEnd[0] != '\0')
    ++pszEnd;
  if (pszEnd[0] == '\0')
    return FALSE;
  pszEnd[0] = '\0';
  m_nPort = ::atoi(pszField);

  //skip over the whitespace
  pszField = ++pszEnd;
  while (pszField[0] == ' ' && pszField[0] != '\0')
    ++pszField;
  if (pszField[0] == '\0')
    return FALSE;

  //Get the address
  pszEnd = pszField;
  while (pszEnd[0] != ' ' && pszEnd[0] != '\0')
    ++pszEnd;
  if (pszEnd[0] == '\0')
    return FALSE;
  pszEnd[0] = '\0';
  m_sAddress = pszField;
  
  //skip over the whitespace
  pszField = ++pszEnd;
  while (pszField[0] == ' ' && pszField[0] != '\0')
    ++pszField;
  if (pszField[0] == '\0')
    return FALSE;

  //Get the latitude  
  pszEnd = pszField;
  while (pszEnd[0] != ' ' && pszEnd[0] != '\0')
    ++pszEnd;
  if (pszEnd[0] == '\0')
    return FALSE;
  pszEnd[0] = '\0';
  
  //Latitude field must be 7 characters long
  if (strlen(pszField) != 7)
    return FALSE;

  //Parse out the northing field
  if (pszField[0] == 'N')
    m_bNorthing = TRUE;
  else if (pszField[0] == 'S')
    m_bNorthing = FALSE;
  else
    return FALSE;

  //Parse out the Latitude degrees
  char sNum[4];
  sNum[0] = pszField[1];
  sNum[1] = pszField[2];
  sNum[2] = pszField[3];
  sNum[3] = '\0';
  int nLatDeg = ::atoi(sNum);

  //Parse out the Latitude minutes
  sNum[0] = pszField[5];
  sNum[1] = pszField[6];
  sNum[2] = '\0';
  int nLatMin = ::atoi(sNum);
  m_nLatitudeMinutes = nLatMin + 60*nLatDeg;
  
  //skip over the whitespace
  pszField = ++pszEnd;
  while (pszField[0] == ' ' && pszField[0] != '\0')
    ++pszField;
  if (pszField[0] == '\0')
    return FALSE;

  //Get the longitude  
  pszEnd = pszField;
  while (pszEnd[0] != ' ' && pszEnd[0] != '\0')
    ++pszEnd;
  if (pszEnd[0] == '\0')
    return FALSE;
  pszEnd[0] = '\0';
  
  //Longitude field must be 7 characters long
  if (strlen(pszField) != 7)
    return FALSE;

  //Parse out the easting field
  if (pszField[0] == 'E')
    m_bEasting = TRUE;
  else if (pszField[0] == 'W')
    m_bEasting = FALSE;
  else
    return FALSE;

  //Parse out the Longitude degrees
  sNum[0] = pszField[1];
  sNum[1] = pszField[2];
  sNum[2] = pszField[3];
  sNum[3] = '\0';
  int nLongDeg = ::atoi(sNum);

  //Parse out the Longitude minutes
  sNum[0] = pszField[5];
  sNum[1] = pszField[6];
  sNum[2] = '\0';
  int nLongMin = ::atoi(sNum);
  m_nLongitudeMinutes = nLongMin + 60*nLongDeg;

  //skip over the whitespace
  pszField = ++pszEnd;
  while (pszField[0] == ' ' && pszField[0] != '\0')
    ++pszField;
  if (pszField[0] == '\0')
    return FALSE;

  //Whats left is put into the description field
  m_sDescription = pszField;

  //Everything has been parsed correctly
  return TRUE;
}





CCDDBQueryResult::CCDDBQueryResult()
{
  m_dwDiscID = 0;
}

CCDDBQueryResult::CCDDBQueryResult(const CCDDBQueryResult& result)
{
  *this = result;
}

CCDDBQueryResult& CCDDBQueryResult::operator=(const CCDDBQueryResult& result)
{
  m_sCategory = result.m_sCategory;
  m_dwDiscID  = result.m_dwDiscID;
  m_sArtist   = result.m_sArtist;
  m_sTitle    = result.m_sTitle;

  return *this;
}

BOOL CCDDBQueryResult::Parse(LPSTR pszLine)
{
  LPSTR pszField = pszLine;

  //Get the category
  LPSTR pszEnd = pszField;
  while (pszEnd[0] != ' ' && pszEnd[0] != '\0')
    ++pszEnd;
  if (pszEnd[0] == '\0')
    return FALSE;
  pszEnd[0] = '\0';
  m_sCategory = pszField;

  //skip over the whitespace
  pszField = ++pszEnd;
  while (pszField[0] == ' ' && pszField[0] != '\0')
    ++pszField;
  if (pszField[0] == '\0')
    return FALSE;

  //Get over the CDDB DISCID
  while (pszEnd[0] != ' ' && pszEnd[0] != '\0')
    ++pszEnd;
  if (pszEnd[0] == '\0')
    return FALSE;
  pszEnd[0] = '\0';
  sscanf(pszField, "%x", &m_dwDiscID);

  //skip over the whitespace
  pszField = ++pszEnd;
  while (pszField[0] == ' ' && pszField[0] != '\0')
    ++pszField;
  if (pszField[0] == '\0')
    return FALSE;

  //Get the Artist and Title  
  m_sTitle = pszField;

  //Remove any EOL if it is on the end
  int nEOLPos = m_sTitle.Find(_T("\r\n"));
  if (nEOLPos == -1)
    nEOLPos = m_sTitle.Find(_T("\n"));
  if (nEOLPos != -1)
    m_sTitle = m_sTitle.Left(nEOLPos);
  
  //Split into the artist and title
  int nSlashPos = m_sTitle.Find(_T('/'));
  if (nSlashPos != -1)
  {
    m_sArtist = m_sTitle.Left(nSlashPos);
    m_sTitle = m_sTitle.Right(m_sTitle.GetLength() - nSlashPos - 1);

    //Remove any trailing or leading spaces
    m_sArtist.TrimLeft();
    m_sArtist.TrimRight();
    m_sTitle.TrimLeft();
    m_sTitle.TrimRight();
  }

  return TRUE;
}





CCDDBTrackPosition::CCDDBTrackPosition()
{
  m_nMinute = 0;
  m_nSecond = 0;
  m_nFrame  = 0;
}

CCDDBTrackPosition::CCDDBTrackPosition(const CCDDBTrackPosition& position)
{
  *this = position;
}

CCDDBTrackPosition& CCDDBTrackPosition::operator=(const CCDDBTrackPosition& position)
{
  m_nMinute = position.m_nMinute;
  m_nSecond = position.m_nSecond;
  m_nFrame  = position.m_nFrame;

  return *this;
}





CHTTPSocket::CHTTPSocket()
{
  m_hSocket = INVALID_SOCKET; //default to an invalid scoket descriptor
}

CHTTPSocket::~CHTTPSocket()
{
  Close();
}

BOOL CHTTPSocket::Create()
{
  m_hSocket = socket(AF_INET, SOCK_STREAM, 0);
  return (m_hSocket != INVALID_SOCKET);
}

BOOL CHTTPSocket::Connect(LPCTSTR pszHostAddress, int nPort)
{
	//For correct operation of the T2A macro, see MFC Tech Note 59
	USES_CONVERSION;

  //must have been created first
  ASSERT(m_hSocket != INVALID_SOCKET);
  
	LPSTR lpszAscii = T2A((LPTSTR)pszHostAddress);

	//Determine if the address is in dotted notation
	SOCKADDR_IN sockAddr;
	ZeroMemory(&sockAddr, sizeof(sockAddr));
	sockAddr.sin_family = AF_INET;
	sockAddr.sin_port = htons((u_short)nPort);
	sockAddr.sin_addr.s_addr = inet_addr(lpszAscii);

	//If the address is not dotted notation, then do a DNS 
	//lookup of it.
	if (sockAddr.sin_addr.s_addr == INADDR_NONE)
	{
		LPHOSTENT lphost;
		lphost = gethostbyname(lpszAscii);
		if (lphost != NULL)
			sockAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
		else
		{
      WSASetLastError(WSAEINVAL); 
			return FALSE;
		}
	}

	//Call the protected version which takes an address 
	//in the form of a standard C style struct.
	return Connect((SOCKADDR*)&sockAddr, sizeof(sockAddr));
}

BOOL CHTTPSocket::Connect(const SOCKADDR* lpSockAddr, int nSockAddrLen)
{
	return (connect(m_hSocket, lpSockAddr, nSockAddrLen) != SOCKET_ERROR);
}

BOOL CHTTPSocket::Send(LPCSTR pszBuf, int nBuf)
{
  //must have been created first
  ASSERT(m_hSocket != INVALID_SOCKET);

  return (send(m_hSocket, pszBuf, nBuf, 0) != SOCKET_ERROR);
}

int CHTTPSocket::Receive(LPSTR pszBuf, int nBuf)
{
  //must have been created first
  ASSERT(m_hSocket != INVALID_SOCKET);

  return recv(m_hSocket, pszBuf, nBuf, 0); 
}

void CHTTPSocket::Close()
{
	if (m_hSocket != INVALID_SOCKET)
	{
		VERIFY(SOCKET_ERROR != closesocket(m_hSocket));
		m_hSocket = INVALID_SOCKET;
	}
}

BOOL CHTTPSocket::IsReadible(BOOL& bReadible)
{
  timeval timeout = {0, 0};
  fd_set fds;
  FD_ZERO(&fds);
  FD_SET(m_hSocket, &fds);
  int nStatus = select(0, &fds, NULL, NULL, &timeout);
  if (nStatus == SOCKET_ERROR)
  {
    return FALSE;
  }
  else
  {
    bReadible = !(nStatus == 0);
    return TRUE;
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图在线视频| 久88久久88久久久| 精品亚洲成a人| 欧美亚日韩国产aⅴ精品中极品| 91精品国产一区二区| 国产精品毛片久久久久久| 日本亚洲免费观看| 色综合久久中文字幕综合网| 日韩欧美在线影院| 亚洲综合自拍偷拍| 国产成人免费视频一区| 91精品在线免费观看| 一区二区三区国产| 91理论电影在线观看| 精品久久久久久久久久久久久久久久久| 亚洲免费av网站| 福利一区福利二区| 亚洲精品一区二区三区99| 午夜av一区二区| 欧美亚洲综合在线| 伊人夜夜躁av伊人久久| 国产成人综合亚洲网站| 日韩欧美中文字幕精品| 婷婷国产v国产偷v亚洲高清| 在线亚洲精品福利网址导航| 亚洲色图欧洲色图婷婷| www.欧美色图| 亚洲视频一区在线| 91日韩精品一区| 亚洲欧美日韩一区二区| 成人午夜视频福利| 国产精品网曝门| 国产乱人伦偷精品视频免下载 | 久久美女高清视频| 日本怡春院一区二区| 欧美精品色一区二区三区| 亚洲一区在线播放| 欧美高清www午色夜在线视频| 亚洲一区免费观看| 欧美日本一道本在线视频| 亚洲bt欧美bt精品| 3d动漫精品啪啪一区二区竹菊| 午夜精品久久久久久久蜜桃app | 国产精品一区二区三区乱码| 精品久久久久一区二区国产| 国产乱人伦精品一区二区在线观看| 久久女同性恋中文字幕| 成人性生交大片免费看中文 | 99久久精品99国产精品| 中文字幕中文字幕在线一区| 91一区二区在线观看| 一区二区三区.www| 在线不卡一区二区| 狠狠色丁香婷婷综合| 久久精品网站免费观看| 99久久精品免费观看| 亚洲美腿欧美偷拍| 欧美一区二区三区免费大片| 麻豆精品精品国产自在97香蕉| 久久蜜桃av一区二区天堂 | 欧美精品tushy高清| 美女性感视频久久| 中文字幕第一区二区| 91理论电影在线观看| 日韩av电影免费观看高清完整版| 精品久久久久久久人人人人传媒| www.色精品| 免费观看日韩av| 中文字幕亚洲一区二区va在线| 在线免费观看一区| 久久99精品国产.久久久久久| 国产精品水嫩水嫩| 3d动漫精品啪啪一区二区竹菊| 国产激情91久久精品导航| 亚洲黄色免费电影| 久久女同精品一区二区| 欧美性色欧美a在线播放| 极品少妇一区二区| 亚洲一区电影777| 国产欧美综合在线观看第十页| 在线观看国产91| 国产二区国产一区在线观看| 亚洲成人福利片| 国产精品久久99| 精品久久久影院| 欧美日韩mp4| 99精品久久只有精品| 免费成人av在线播放| 亚洲欧美韩国综合色| 日韩欧美国产综合在线一区二区三区| 不卡的av网站| 国产精品一区二区在线观看不卡| 亚洲一级二级三级在线免费观看| 国产日韩亚洲欧美综合| 3d动漫精品啪啪1区2区免费| 亚洲男人的天堂在线aⅴ视频| 日韩午夜av电影| 亚洲一区二区综合| 国产精品欧美极品| 裸体歌舞表演一区二区| 综合激情网...| 91美女在线观看| 本田岬高潮一区二区三区| 91丝袜美女网| 51精品视频一区二区三区| 精品免费99久久| 国产精品国产三级国产普通话三级 | 欧美一区二区三区精品| 欧美mv日韩mv亚洲| 136国产福利精品导航| 一区二区三区四区乱视频| 日韩高清一级片| 成人手机在线视频| 欧美日韩1区2区| 久久免费看少妇高潮| 亚洲男人的天堂av| 美女免费视频一区二区| 国产风韵犹存在线视精品| 91黄色激情网站| 亚洲精品一区二区三区影院| 亚洲精品五月天| 免费不卡在线观看| 99视频在线观看一区三区| 欧美精品三级在线观看| 欧美国产精品v| 日本午夜精品一区二区三区电影 | 亚洲少妇屁股交4| 久久国产精品无码网站| 色狠狠桃花综合| 久久精品免费在线观看| 亚洲香蕉伊在人在线观| 国产成人综合在线| 日韩一区二区精品| 一区二区三区 在线观看视频| 久草中文综合在线| 欧美色倩网站大全免费| 国产精品视频九色porn| 五月综合激情婷婷六月色窝| www.色精品| 久久久综合九色合综国产精品| 亚洲综合999| aaa亚洲精品一二三区| 欧美一区三区四区| 亚洲一区在线观看免费观看电影高清| 国产成人三级在线观看| 欧美一级艳片视频免费观看| 亚洲精品ww久久久久久p站| 国产高清成人在线| 欧美变态凌虐bdsm| 午夜精品免费在线观看| 91精品办公室少妇高潮对白| 中文字幕不卡在线播放| 狠狠色伊人亚洲综合成人| 91麻豆精品国产91久久久久| 洋洋av久久久久久久一区| 91欧美激情一区二区三区成人| 国产精品网站在线观看| 国产激情一区二区三区四区 | 亚洲第一精品在线| 91麻豆精品秘密| 国产精品国产三级国产aⅴ中文| 国产一区二区三区不卡在线观看| 欧美一级欧美三级| 日本不卡高清视频| 日韩一级二级三级| 日韩不卡手机在线v区| 欧美日韩成人一区| 美女视频一区二区三区| 欧美一区二视频| 奇米777欧美一区二区| 4438成人网| 麻豆国产91在线播放| 欧美不卡一区二区三区| 精品一区二区国语对白| 欧美电视剧在线看免费| 久久99精品久久久久久国产越南 | 日韩三级视频在线观看| 日本va欧美va精品| 欧美一级二级在线观看| 美腿丝袜亚洲色图| 2020国产成人综合网| 精品午夜久久福利影院| 久久精品一区四区| 波多野结衣一区二区三区 | 色吧成人激情小说| 亚洲一区二区偷拍精品| 欧美性猛交一区二区三区精品| 亚洲欧洲av在线| 久久99精品一区二区三区| 成人avav影音| 日韩欧美资源站| 国产精品激情偷乱一区二区∴| 国产欧美一二三区| 蜜桃在线一区二区三区| 亚洲国产精品一区二区久久恐怖片| 亚洲欧美日韩小说| 午夜亚洲福利老司机| 国产精品一二三四区| 成人免费高清视频在线观看| 在线一区二区观看|