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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 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一区二区三区免费野_久草精品视频
6080午夜不卡| 精品久久久久久无| 日韩午夜av电影| 中文字幕色av一区二区三区| 首页国产欧美久久| 91猫先生在线| 国产欧美中文在线| 美脚の诱脚舐め脚责91| 欧美日韩国产区一| 一区二区三区国产豹纹内裤在线 | 亚洲国产另类av| 不卡av在线网| 欧美精品一区在线观看| 日本在线不卡一区| 欧美丝袜丝交足nylons| 亚洲免费电影在线| av在线不卡观看免费观看| 国产精品久久毛片av大全日韩| 欧美经典三级视频一区二区三区| 精品一区二区av| 国产精品99久久久久久宅男| 一区二区三区中文在线| 国产精品免费看片| 激情综合色综合久久| 欧美乱妇23p| 亚洲自拍欧美精品| 99re热这里只有精品视频| 国产精品视频看| 国产成人av电影在线| 久久久国产精品不卡| 另类小说一区二区三区| 欧美成人aa大片| 久久电影网电视剧免费观看| 91精品综合久久久久久| 日韩一二三区不卡| 精品久久一区二区三区| 国产成人精品综合在线观看| 久久亚洲精品国产精品紫薇| 激情深爱一区二区| 久久久国产综合精品女国产盗摄| 国产成人免费视频网站| 欧美韩日一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 国产三级精品三级在线专区| 福利电影一区二区| 日韩一区在线看| 91福利社在线观看| 日韩福利电影在线观看| 日韩一区二区三区av| 韩国av一区二区三区四区 | 色婷婷亚洲综合| 一区二区三区美女| 欧美一区二区视频网站| 国产一区在线观看麻豆| 亚洲国产精品二十页| 在线看国产一区二区| 日本在线不卡一区| 亚洲国产高清aⅴ视频| 91麻豆免费看| 蜜桃在线一区二区三区| 国产欧美日本一区二区三区| 91色|porny| 蜜臀a∨国产成人精品| 欧美激情艳妇裸体舞| 欧美无乱码久久久免费午夜一区| 秋霞电影网一区二区| 中文字幕av不卡| 欧美日韩成人综合| 国产毛片精品视频| 一区二区三区成人在线视频| 欧美电影免费观看高清完整版| 成人av片在线观看| 丝袜美腿成人在线| 国产欧美日韩在线看| 欧美精品乱人伦久久久久久| 大桥未久av一区二区三区中文| 婷婷中文字幕一区三区| 国产欧美日韩不卡| 日韩一区二区三区观看| 欧美性感一区二区三区| 成人天堂资源www在线| 捆绑变态av一区二区三区| 亚洲免费av在线| 国产清纯美女被跳蛋高潮一区二区久久w| 91福利国产成人精品照片| 国产麻豆精品久久一二三| 日韩成人av影视| 蜜桃视频免费观看一区| 亚洲天堂a在线| 久久久久久亚洲综合影院红桃| 欧美日韩一区三区四区| 97成人超碰视| 国产a级毛片一区| 久久精品av麻豆的观看方式| 亚洲黄色尤物视频| 中文字幕一区二区三区精华液| 欧美成人精品3d动漫h| 欧美精品第一页| 欧美主播一区二区三区美女| 成人18视频日本| 粉嫩一区二区三区在线看| 激情综合网av| 精油按摩中文字幕久久| 久久精品国产久精国产爱| 日本视频一区二区三区| 亚洲国产中文字幕在线视频综合| 17c精品麻豆一区二区免费| 国产女主播视频一区二区| 久久中文娱乐网| 久久蜜桃av一区精品变态类天堂 | 欧美四级电影网| 欧美亚州韩日在线看免费版国语版| 99re这里只有精品视频首页| 国产激情一区二区三区桃花岛亚洲 | 日韩国产精品久久久| 亚洲国产视频一区| 亚洲国产精品久久久男人的天堂| 夜夜嗨av一区二区三区| 亚洲制服丝袜在线| 日日夜夜精品免费视频| 日本亚洲电影天堂| 老色鬼精品视频在线观看播放| 精品一区二区免费看| 国产麻豆精品在线| 成人免费观看视频| 91在线观看美女| 欧美主播一区二区三区美女| 欧美撒尿777hd撒尿| 777色狠狠一区二区三区| 日韩色视频在线观看| www成人在线观看| 国产精品午夜久久| 亚洲免费观看在线观看| 亚洲va欧美va国产va天堂影院| 美女尤物国产一区| 国产精品中文有码| 91美女片黄在线观看91美女| 欧美二区在线观看| 欧美精品一区二区三区一线天视频| 国产偷v国产偷v亚洲高清| 亚洲女与黑人做爰| 免费观看久久久4p| 99麻豆久久久国产精品免费优播| 欧美日韩在线亚洲一区蜜芽| 日韩精品在线一区二区| 国产精品美女一区二区| 亚洲va欧美va人人爽午夜| 国产一区在线观看麻豆| 在线观看亚洲精品| www国产成人免费观看视频 深夜成人网| 中文字幕的久久| 日韩成人dvd| 99免费精品在线观看| 日韩一级视频免费观看在线| 自拍偷拍欧美精品| 毛片av中文字幕一区二区| 欧美日韩在线电影| 久久精品视频在线看| 亚洲国产精品欧美一二99| 国产一区视频网站| 欧美日韩二区三区| 欧美激情一区不卡| 久久精品国产亚洲一区二区三区| 91麻豆精品视频| 精品国产第一区二区三区观看体验 | 欧美国产视频在线| 日韩国产精品91| 色婷婷av一区二区三区软件| 欧美精品一区二区三| 午夜精品成人在线视频| 99久久婷婷国产综合精品| 欧美tickle裸体挠脚心vk| 亚洲精品国产一区二区三区四区在线| 精品一区二区三区视频| 欧美日韩不卡一区| 一区二区三区欧美视频| 成人涩涩免费视频| 精品国产髙清在线看国产毛片| 五月天视频一区| 欧美性色综合网| 成人免费在线视频| 不卡av免费在线观看| 中文字幕av一区二区三区高| 狠狠色丁香久久婷婷综合_中 | 欧美精品高清视频| 亚洲精品乱码久久久久| 国产**成人网毛片九色| 久久免费午夜影院| 精品一区二区三区久久| 日韩一区二区三免费高清| 青青草原综合久久大伊人精品优势| 在线中文字幕一区| 亚洲精品国产精品乱码不99| 91麻豆swag| 亚洲婷婷综合久久一本伊一区| 成人综合在线观看| 中文字幕av不卡| 不卡av在线免费观看| 国产精品久久久久婷婷| k8久久久一区二区三区|