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

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

?? bthnscreate.cxx

?? SDP Search and Record generator OVERVIEW: Recognizing the difficulty in creating an SDP service
?? CXX
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/**
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.


Abstract:
    Windows CE Bluetooth application sample
    Demonstrates creating an SDP record binary value or setting up an
    SDP search.
**/

#if ! defined (UNDER_CE)
#define _WIN32_DCOM
#include <assert.h>
#define ASSERT(x)  assert(x)
#endif

#include <windows.h>
#include "bthapi.h"
#include "bt_sdp.h"
#include "winsock2.h"
#include "bthnscreate.hxx"

#if ! defined (UNDER_CE)
#include <stdio.h>
#endif


BOOL  g_fVerbose;            // Should we be verbose?
int   g_iIndent = 0;         // Number of tabs to insert during a printout.

IClassFactory *pCFContainer = NULL;


#if defined (UNDER_CE)
const CLSID CLSID_SdpRecord = {0xACD02BA7,0x9667,0x4085,{0xA1,0x00,0xCC,0x6A,0xCA,0x96,0x21,0xD6}};
const CLSID CLSID_SdpNodeContainer = {0xD5CA76C5,0x0DEE,0x4453,{0x96,0xA1,0xE6,0x03,0xC2,0x40,0x17,0x66}};
#else
const CLSID CLSID_SdpRecord =        {0x238CACDA,0x2346,0x4748,{0xB3,0xEE,0xF1,0x27,0x82,0x77,0x2D,0xFC}};
const CLSID CLSID_SdpNodeContainer = {0x51002954,0xD4E4,0x4507,{0xB4,0x80,0x1B,0x84,0x54,0x34,0x7C,0xDC}};
#endif

#define GUID_FORMAT     "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n"

#define GUID_ELEMENTS(p) \
    &p->Data1,                 &p->Data2,    &p->Data3,\
    &p->Data4[0], &p->Data4[1], &p->Data4[2], &p->Data4[3],\
    &p->Data4[4], &p->Data4[5], &p->Data4[6], &p->Data4[7]

void CreateSdpRecord(FILE* pf);
void CreateServiceSearch(FILE* pf);
void CreateAttributeSearch(FILE* pf);
void CreateServiceAttributeSearch(FILE* pf);

#define SDP_RECORD_COMMENT_CHAR  ';'

//
// Macros to help generate verbose output
// 
#define PRINT_TABS()  {\
                    if (g_fVerbose) { \
                       for (int _iterator = 0; _iterator < g_iIndent; _iterator++) \
                           wprintf(L"\t"); \
                       }\
                    }

void MyPrint(WCHAR *wszFormat, ...) {
    if (g_fVerbose) {
        PRINT_TABS();

        va_list ap;
        va_start(ap,wszFormat);
        vfwprintf(stdout,wszFormat,ap);
        wprintf(L"\n");
        va_end (ap);
    }
}

#define DO(x) x MyPrint(L#x);
#define INDENT(offset) g_iIndent += offset;

inline void SdpAddEntry(USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont, NodeData *pNdw)
{
    if (pRecord)  { 
        if (ERROR_SUCCESS != pRecord->SetAttribute(attribVal, pNdw)) {
            wprintf(L"*** ERROR *** adding attribute value 0x%x\n",attribVal);
            exit(0); 
        }
        if (g_fVerbose) { 
            PRINT_TABS(); 
            wprintf(L"pRecord->SetAttribute(0x%x, &ndw);\n\n",attribVal); 
        } 
    } 
    else { 
        if (ERROR_SUCCESS != pCont->AppendNode(pNdw)) { 
            wprintf(L"*** ERROR *** pCont->AppendNode fails\n"); 
            exit(0); 
        } 
        if (g_fVerbose) { 
            PRINT_TABS(); 
            wprintf(L"pContainer->AppendNode(&ndw);\n\n");
        } 
   }
}
inline void PrintLineBreak(int iNewLines) {
    if (g_fVerbose) {
        for (int i = 0; i < iNewLines; i++)
            wprintf(L"\n");
    }
}

#define MAX_HANDLES      100
#define MAX_ATTRIBUTES   100

#define SKIP_WHITESPACE(p)   while (*(p) && iswspace(*(p))) ++(p);


void SdpRecordCreatorUsage(void) {
    wprintf(L"bthnscreate [-verbose][-record/-service/-attribute/-service_attribute][file]\n"
            L"           -verbose (optional) generates C code\n"
            L"           [file] is the file containing the SDP paramaters\n"
            L"           -record:             Create SDP service record\n"
            L"           -service:            Create SDP service search\n"
            L"           -attribute           Create SDP attribute search\n"
            L"           -service_attribute:  Create SDP Service Attribute search\n");
}

int wmain (int argc, WCHAR **argv) {
    int iShift;
    if (argc < 2) {
        SdpRecordCreatorUsage();
        return 0;
    }
    else if (argc < 3 || (0 == wcsicmp(argv[1],L"-help"))) {
        // Print more generic help...
        SdpRecordCreatorUsage();
        return 0;
    }

    if (0 == wcsicmp(argv[1],L"-verbose")) {
        iShift = 2;
        g_fVerbose = TRUE;
    }
    else {
        iShift = 1;
        g_fVerbose = FALSE;
    }

    if (argc - iShift != 2) {
        SdpRecordCreatorUsage();
        return 0;
    }

    FILE *pf = _wfopen(argv[iShift+1], L"r");
    if (!pf) {
        wprintf(L"*** ERROR ***  cannot open %s\n", argv[iShift+1]);
        return 0;
    }

    if (0 == wcsicmp(argv[iShift],L"-record"))
        CreateSdpRecord(pf);
    else if (0 == wcsicmp(argv[iShift],L"-service"))
        CreateServiceSearch(pf);
    else if (0 == wcsicmp(argv[iShift],L"-attribute"))
        CreateAttributeSearch(pf);
    else if (0 == wcsicmp(argv[iShift],L"-service_attribute"))
        CreateServiceAttributeSearch(pf);
    else
        SdpRecordCreatorUsage();

    fclose(pf);
    return 0;
}

typedef void (*PFNPARSE)(FILE*, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
struct ParseEntry {
    PFNPARSE pfnParse;
    char *name;
};

void AddUint8(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddUint16(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddUint32(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddUint64(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddUint128(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddInt8(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddInt16(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddInt32(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddInt64(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddInt128(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddUuid16(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddUuid32(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddUuid128(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddBoolean(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddNil(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddString(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddUrl(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddSequence(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void AddAlternative(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);
void ContainerEnd(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont);

ParseEntry entries[] = {
    {AddUint8, "UINT8"},
    {AddUint16, "UINT16"},
    {AddUint32, "UINT32"},
    {AddUint64, "UINT64"},
    {AddUint128, "UINT128"},
    {AddInt8, "INT8"},
    {AddInt16, "INT16"},
    {AddInt32, "INT32"},
    {AddInt64, "INT64"},
    {AddInt128, "INT128"},
    {AddUuid16, "UUID16"},
    {AddUuid32, "UUID32"},
    {AddUuid128, "UUID128"},
    {AddBoolean, "BOOLEAN"},
    {AddString, "STRING"},
    {AddUrl, "URL"},
    {AddSequence, "SEQUENCE"},
    {AddAlternative, "ALTERNATIVE"},
    {AddNil, "Nil"},
    {ContainerEnd, "END" },
    {NULL, NULL},
};

void AddUint8(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    int i;
    fscanf(pf, "%x\n", &i);

    NDW ndw;
    ndw.Uint8((UCHAR) (i & 0xFF));
    MyPrint(L"ndw.Uint8(0x%x);",(UCHAR) (i & 0xFF));

    SdpAddEntry(attribVal,pRecord, pCont,&ndw);
}

void AddUint16(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    int i;
    fscanf(pf, "%x\n", &i);

    NDW ndw;
    ndw.Uint16((USHORT) (i & 0xFFFF));
    MyPrint(L"ndw.Uint16(0x%x);",(USHORT) (i & 0xFFFF));
    SdpAddEntry(attribVal,pRecord, pCont,&ndw);
}

void AddUint32(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    int i;
    fscanf(pf, "%x\n", &i);

    NDW ndw;
    ndw.Uint32((UINT) i);
    MyPrint(L"ndw.Uint32(0x%x);",(UINT) i);
    SdpAddEntry(attribVal,pRecord, pCont,&ndw);
}

void AddUint64(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    ULONGLONG ull;
    fscanf(pf, "%I64x\n", &ull);

    NDW ndw;
    ndw.Uint64(ull);
    MyPrint(L"ndw.Uint64(0x%I64x);",ull);
    SdpAddEntry(attribVal,pRecord, pCont,&ndw);
}

void AddUint128(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    SDP_ULARGE_INTEGER_16 u128;
    fscanf(pf, "%I64x,",&u128.HighPart);
    fscanf(pf, "%I64x\n",&u128.LowPart);

    NDW ndw;
    ndw.Uint128(&u128);
    MyPrint(L"ulargeInt.LowPart  = 0x%I64x;",u128.LowPart);
    MyPrint(L"ulargeInt.HighPart = 0x%I64x;",u128.HighPart);
    MyPrint(L"ndw.Uint128(&ulargeInt);");
    SdpAddEntry(attribVal,pRecord, pCont,&ndw);
}

static WCHAR szWriteBuf[48];

WCHAR * PrintNumber(int iVal, int iMask) {
	if (iVal > 0)
		wsprintf(szWriteBuf,L"0x%x",(iVal & iMask));
	else {
		iVal *= -1;
		wsprintf(szWriteBuf,L"-0x%x",(iVal & iMask));
	}

	return szWriteBuf;
}

WCHAR * PrintNumber64(__int64 iVal) {
	if (iVal > 0)
		wsprintf(szWriteBuf,L"0x%I64x",iVal);
	else {
		iVal *= -1;
		wsprintf(szWriteBuf,L"-0x%I64x",iVal);
	}

	return szWriteBuf;
}


void AddInt8(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    int i;
    fscanf(pf, "%x\n", &i);

    NDW ndw;
    ndw.Int8((CHAR) (i & 0xFF));

    MyPrint(L"ndw.Int8(%s);",PrintNumber(i,0xFF));
    SdpAddEntry(attribVal,pRecord, pCont,&ndw);
}

void AddInt16(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    int i;
    fscanf(pf, "%x\n", &i);

    NDW ndw;
    ndw.Int16((SHORT) (i & 0xFFFF));
    MyPrint(L"ndw.Int16(%s);",PrintNumber(i,0xFFFF));
    SdpAddEntry(attribVal,pRecord, pCont,&ndw);
}

void AddInt32(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    int i;
    fscanf(pf, "%x\n", &i);

    NDW ndw;
    ndw.Int32((ULONG) i);
    MyPrint(L"ndw.Int32(%s);",PrintNumber(i,0xFFFFFFFF));
    SdpAddEntry(attribVal,pRecord, pCont,&ndw);
}

void AddInt64(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    LONGLONG ll;
    fscanf(pf, "%I64x\n", &ll);

    NDW ndw;
    ndw.Int64(ll);
    MyPrint(L"ndw.Int64(%s);",PrintNumber64(ll));
    SdpAddEntry(attribVal,pRecord, pCont,&ndw);
}

void AddInt128(FILE *pf, USHORT attribVal, ISdpRecord *pRecord, ISdpNodeContainer *pCont)
{
    SDP_LARGE_INTEGER_16 u128;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合在线视频| 亚洲成人777| 在线精品亚洲一区二区不卡| 日韩电影一区二区三区四区| 国产精品高潮呻吟久久| 欧美一三区三区四区免费在线看| 成人a免费在线看| 另类小说一区二区三区| 亚洲自拍偷拍图区| 中文字幕一区二区5566日韩| 日韩欧美一二三区| 欧美日韩一区二区三区四区 | 8x8x8国产精品| 99re视频精品| 福利视频网站一区二区三区| 青青草91视频| 亚洲成人在线观看视频| 亚洲欧美自拍偷拍| 中文字幕成人av| 久久综合九色综合欧美就去吻| 欧美三级韩国三级日本一级| 91丨九色丨蝌蚪丨老版| 成人综合在线观看| 国产精品18久久久久久久久| 日本不卡一区二区| 偷拍日韩校园综合在线| 亚洲午夜精品久久久久久久久| 日韩美女视频一区二区| 中文字幕+乱码+中文字幕一区| 欧美va亚洲va在线观看蝴蝶网| 91精品国产麻豆国产自产在线 | 亚洲不卡在线观看| 亚洲在线成人精品| av激情综合网| 成人免费高清视频在线观看| 国产福利一区二区| 国产不卡视频在线播放| 成人自拍视频在线观看| 成人国产精品免费| 99在线精品观看| 91在线国内视频| 色噜噜狠狠一区二区三区果冻| 99re热视频精品| 色综合久久久久综合体| 色94色欧美sute亚洲13| 在线一区二区三区| 欧美巨大另类极品videosbest | 日韩免费视频线观看| 欧美不卡视频一区| 欧美精品一区二区在线观看| 久久综合九色综合97_久久久| 久久色.com| 国产精品美女久久久久久久| 亚洲欧美一区二区视频| 最新国产の精品合集bt伙计| 国产剧情在线观看一区二区| 国精产品一区一区三区mba桃花| 韩国女主播成人在线观看| 精品一区二区久久久| 国产91精品露脸国语对白| 国产性天天综合网| 国产精品美女久久久久av爽李琼| 国产精品不卡一区二区三区| 亚洲综合在线观看视频| 青青草国产成人99久久| 极品美女销魂一区二区三区| 成人在线综合网站| 在线精品视频小说1| 欧美一级搡bbbb搡bbbb| 久久亚洲欧美国产精品乐播| 最新欧美精品一区二区三区| 亚洲va国产天堂va久久en| 精品无人区卡一卡二卡三乱码免费卡| 国产成a人亚洲精品| 日本电影亚洲天堂一区| 欧美成人一级视频| 亚洲欧美色一区| 日本中文字幕不卡| 成人av在线网站| 555夜色666亚洲国产免| 国产视频在线观看一区二区三区| 一区二区三区中文字幕精品精品 | 亚洲乱码精品一二三四区日韩在线 | 在线成人午夜影院| 国产片一区二区三区| 亚欧色一区w666天堂| 国产在线播放一区| 欧美亚洲国产bt| 久久久电影一区二区三区| 一区二区三区不卡视频| 国产精品中文字幕一区二区三区| 91视频在线看| 亚洲精品一线二线三线| 亚洲国产精品久久人人爱| 国产成人免费xxxxxxxx| 51午夜精品国产| 亚洲欧美日韩国产另类专区| 国内外成人在线视频| 欧美日韩的一区二区| 国产精品久久福利| 国产在线日韩欧美| 777久久久精品| 一区二区三区四区中文字幕| 国产成人在线视频免费播放| 欧美群妇大交群中文字幕| 中文字幕制服丝袜一区二区三区| 精品一区二区三区不卡| 欧美久久一区二区| 一区二区三区日韩| 97se亚洲国产综合自在线观| 337p日本欧洲亚洲大胆色噜噜| 亚洲一卡二卡三卡四卡| 91麻豆福利精品推荐| 一区二区三区久久| 久久综合久久综合久久综合| 亚洲综合在线电影| 99久久er热在这里只有精品15| 精品日韩在线观看| 日本成人在线不卡视频| 欧美久久久久久久久中文字幕| 亚洲欧美中日韩| 成人性生交大片免费看在线播放| 欧美tickling网站挠脚心| 日韩avvvv在线播放| 欧美性大战久久久| 亚洲激情网站免费观看| 91亚洲大成网污www| 国产精品久线在线观看| 成人免费观看视频| 国产精品久久毛片| www.亚洲激情.com| 国产一区亚洲一区| 精品捆绑美女sm三区| 激情图片小说一区| 精品精品欲导航| 国产一区欧美日韩| 久久精品视频免费| 国产99精品视频| 国产精品色哟哟| 91在线国产观看| 亚洲综合另类小说| 欧美日韩亚洲国产综合| 午夜精品在线看| 欧美www视频| 国产福利一区二区三区视频在线| 久久久亚洲精品石原莉奈| 国产成人在线视频免费播放| 国产欧美日韩视频在线观看| 懂色一区二区三区免费观看| 欧美国产1区2区| 91欧美激情一区二区三区成人| 亚洲男人的天堂一区二区| 欧美色男人天堂| 日韩av二区在线播放| 久久午夜国产精品| 午夜影院久久久| 欧美视频一区二区三区四区 | 美女精品一区二区| 精品国产一二三| 国产成人h网站| 综合激情网...| 欧美日韩久久久一区| 极品销魂美女一区二区三区| 国产欧美日韩在线| 91久久精品一区二区| 日韩高清国产一区在线| 国产日韩精品一区二区浪潮av| 播五月开心婷婷综合| 午夜精品成人在线| 久久久久久毛片| 在线精品视频一区二区| 蜜桃视频一区二区| 国产精品电影院| 91精品国产一区二区| 日韩亚洲欧美一区| 成人精品电影在线观看| 一区二区三区精品视频在线| 日韩欧美色电影| 91视频.com| 麻豆精品在线播放| 亚洲欧美另类久久久精品| 亚洲免费在线看| 欧美一区二区三区在线电影| 国产福利91精品| 亚洲国产精品精华液网站| 久久久噜噜噜久久人人看| 色成年激情久久综合| 国内精品国产成人| 亚洲香肠在线观看| 国产亚洲综合色| 91精品国产综合久久蜜臀| 不卡av在线免费观看| 久久er99热精品一区二区| 亚洲美女电影在线| 久久精品亚洲精品国产欧美| 欧美日韩一区二区在线视频| 国产福利精品一区二区| 麻豆精品一二三| 亚洲va在线va天堂| 亚洲日韩欧美一区二区在线|