📄 btclient.cxx
字号:
continue;
}
unsigned char key[16];
memset (key, 0, sizeof(key));
int iError = BthGetLinkKey (&ba, key);
wprintf (L"BthGetLinkKey returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS) {
for (int i = 0 ; i < 16 ; ++i)
wprintf (L"%02x ", key[i]);
wprintf (L"\n");
}
continue;
} else if (wcsnicmp (szBuffer, L"auth ", 5) == 0) {
WCHAR *p = szBuffer + 5;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
int iError = BthAuthenticate (&ba);
wprintf (L"BthAuthenticate returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsnicmp (szBuffer, L"encrypt ", 8) == 0) {
WCHAR *p = szBuffer + 8;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
while ((*p != '\0') && iswspace (*p))
++p;
int fOn;
if (wcsicmp (p, L"on") == 0)
fOn = 1;
else if (wcsicmp (p, L"off") == 0)
fOn = 0;
else {
wprintf (L"Syntax: on/off\n");
continue;
}
int iError = BthSetEncryption (&ba, fOn);
wprintf (L"BthSetEncryption returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsnicmp (szBuffer, L"revpin ", 7) == 0) {
WCHAR *p = szBuffer + 7;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
int iError = BthRevokePIN (&ba);
wprintf (L"BthRevokePIN returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsnicmp (szBuffer, L"revlink ", 8) == 0) {
WCHAR *p = szBuffer + 8;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
int iError = BthRevokeLinkKey (&ba);
wprintf (L"BthRevokeLinkKey returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsnicmp (szBuffer, L"readbd", 6) == 0) {
BT_ADDR b;
int iError = BthReadLocalAddr (&b);
wprintf (L"BthReadLocalAddr returns 0x%08x %d, address = %04x%08x\n", iError, iError, GET_NAP(b), GET_SAP(b));
continue;
} else if (wcsnicmp (szBuffer, L"readhw", 6) == 0) {
int istat = -1;
int iError = BthGetHardwareStatus (&istat);
wprintf (L"BthGetHardwareStatus returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS) {
switch (istat) {
case HCI_HARDWARE_UNKNOWN:
wprintf (L"HCI_HARDWARE_UNKNOWN\n");
break;
case HCI_HARDWARE_NOT_PRESENT:
wprintf (L"HCI_HARDWARE_NOT_PRESENT\n");
break;
case HCI_HARDWARE_INITIALIZING:
wprintf (L"HCI_HARDWARE_INITIALIZING\n");
break;
case HCI_HARDWARE_RUNNING:
wprintf (L"HCI_HARDWARE_RUNNING\n");
break;
case HCI_HARDWARE_SHUTDOWN:
wprintf (L"HCI_HARDWARE_SHUTDOWN\n");
break;
case HCI_HARDWARE_ERROR:
wprintf (L"HCI_HARDWARE_ERROR\n");
break;
default:
wprintf (L"UNDEFINED RETURN VALUE!\n");
break;
}
}
continue;
} else if (wcsnicmp (szBuffer, L"name ", 5) == 0) {
WCHAR *p = szBuffer + 5;
BT_ADDR b;
if (! GetBA(&p, &b)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
unsigned int cReq = 0;
int iError = BthRemoteNameQuery (&b, 512, &cReq, szBuffer);
wprintf (L"BthRemoteNameQuery returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS)
wprintf (L"Name: %s\n", szBuffer);
continue;
} else if (wcsnicmp (szBuffer, L"inquiry ", 8) == 0) {
WCHAR *p = szBuffer + 8;
unsigned int LAP;
if (! GetUI(&p, &LAP)) {
wprintf (L"Syntax: LAP\n");
continue;
}
if (LAP == 0x0)
LAP = 0x9e8b33; // GIAC_LAP
unsigned char length;
if (! GetUC(&p, &length)) {
wprintf (L"Syntax: length\n");
continue;
}
unsigned char numresp;
if (! GetUC(&p, &numresp)) {
wprintf (L"Syntax: numresp\n");
continue;
}
BthInquiryResult ir[256];
unsigned int cGot = 0;
int iError = BthPerformInquiry (LAP, length, numresp, 256, &cGot, ir);
wprintf (L"BthPerformInquiry returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS) {
for (int i = 0 ; i < (int)cGot ; ++i)
wprintf (L"%04x%08x cod = 0x%08x clock = 0x%04x page = %d period = %d repetition = %d\n", GET_NAP(ir[i].ba), GET_SAP(ir[i].ba), ir[i].cod, ir[i].clock_offset, ir[i].page_scan_mode, ir[i].page_scan_period_mode, ir[i].page_scan_repetition_mode);
}
continue;
} else if (wcsnicmp (szBuffer, L"connect ", 8) == 0) {
WCHAR *p = szBuffer + 8;
BT_ADDR b;
if (! GetBA(&p, &b)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
unsigned short psm;
if (! GetUS(&p, &psm)) {
wprintf (L"Syntax: psm\n");
continue;
}
unsigned short mtu;
if (! GetUS(&p, &mtu)) {
wprintf (L"Syntax: mtu\n");
continue;
}
wprintf (L"Attempting to connect to BT_ADDR %04x%08x psm = 0x%04x\n", GET_NAP(b), GET_SAP(b), psm);
unsigned short cid, outmtu;
int iErr = L2CAPConnect (&b, psm, mtu, &cid, &outmtu);
wprintf (L"L2CAPConnect returns 0x%08x (%d)\n", iErr, iErr);
if (iErr == ERROR_SUCCESS)
CloseHandle (CreateThread (NULL, 0, ReadThread, (void *)cid, 0, NULL));
continue;
} else if (wcsnicmp (szBuffer, L"unaccept ", 9) == 0) {
WCHAR *p = szBuffer + 9;
unsigned short psm;
if (! GetUS (&p, &psm)) {
wprintf (L"Syntax: psm\n");
continue;
}
int iErr = L2CAPClosePSM (psm);
wprintf (L"L2CAPClosePSM returns 0x%08x (%d)\n", iErr, iErr);
continue;
} else if (wcsnicmp (szBuffer, L"accept ", 7) == 0) {
WCHAR *p = szBuffer + 7;
unsigned short psm;
if (! GetUS (&p, &psm)) {
wprintf (L"Syntax: psm\n");
continue;
}
unsigned short mtu;
if (! GetUS (&p, &mtu)) {
wprintf (L"Syntax: mtu\n");
continue;
}
int iErr = L2CAPListen (psm, mtu);
wprintf (L"L2CAPAccept returns 0x%08x (%d)\n", iErr, iErr);
if (iErr == ERROR_SUCCESS)
CloseHandle (CreateThread (NULL, 0, ListenThread, (LPVOID)psm, 0, NULL));
continue;
} else if (wcsnicmp (szBuffer, L"uptest", 6) == 0) {
WCHAR *p = szBuffer + 6;
int c = 0;
if (*p == '1')
c = 10;
else if (*p == '2')
c = 350;
else if (*p == '3')
c = 672;
if (! c) {
wprintf (L"Syntax: number\n");
continue;
}
p += 1;
if (*p != ' ') {
wprintf (L"Syntax!\n");
continue;
}
p += 1;
unsigned short cid;
if (! GetUS(&p, &cid)) {
wprintf (L"Syntax: cid\n");
continue;
}
unsigned char testdata[672];
for (int i = 0 ; i < 672 ; ++i)
testdata[i] = i & 0xff;
int iErr = L2CAPWrite (cid, c, testdata);
wprintf (L"L2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
continue;
} else if (wcsnicmp (szBuffer, L"write ", 6) == 0) {
WCHAR *p = szBuffer + 6;
unsigned short cid;
if (! GetUS(&p, &cid)) {
wprintf (L"Syntax: cid\n");
continue;
}
int iErr = L2CAPWrite (cid, (wcslen (p) + 1) * sizeof(WCHAR), (unsigned char *)p);
wprintf (L"L2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
continue;
} else if (wcsnicmp (szBuffer, L"ping ", 5) == 0) {
WCHAR *p = szBuffer + 5;
BT_ADDR bt;
if (! GetBA(&p, &bt)) {
wprintf (L"Syntax: BT_ADDR\n");
continue;
}
unsigned char bigbuffer[1024];
unsigned int size = sizeof(bigbuffer);
int iErr = L2CAPPing (&bt, (wcslen (p) + 1) * sizeof(WCHAR), (unsigned char *)p, &size, bigbuffer);
wprintf (L"L2CAPPing returns 0x%08x (%d)\n", iErr, iErr);
if ((iErr == ERROR_SUCCESS) && size)
DumpBuff (L"Ping data>", bigbuffer, size);
continue;
} else if (wcsnicmp (szBuffer, L"writeansi ", 10) == 0) {
WCHAR *p = szBuffer + 10;
unsigned short cid;
if (! GetUS(&p, &cid)) {
wprintf (L"Syntax: cid\n");
continue;
}
char buffer[128];
int ichars;
if (ichars = WideCharToMultiByte (CP_ACP, 0, p, -1, buffer, sizeof(buffer), NULL, NULL)) {
int iErr = L2CAPWrite (cid, ichars, (unsigned char *)buffer);
wprintf (L"L2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
}
continue;
} else if (wcsnicmp (szBuffer, L"send ", 5) == 0) {
WCHAR *p = szBuffer + 5;
unsigned short cid;
if (! GetUS(&p, &cid)) {
wprintf (L"Syntax: cid\n");
continue;
}
unsigned short mtu;
if ((! GetUS(&p, &mtu)) || (mtu > 0xffff - 16)) {
wprintf (L"Syntax: mtu\n");
continue;
}
while (*p && iswspace (*p))
++p;
FILE *fp;
if ((! *p) || (! (fp = _wfopen (p, L"rb")))) {
wprintf (L"Syntax: file name\n");
continue;
}
wprintf (L"Sending file %s\n", p);
unsigned char *buffer = (unsigned char *)malloc (0xffff);
int count = 0;
int c = (wcslen (p) + 1) * sizeof(WCHAR);
memcpy (buffer + 16, p, c);
*(int *)buffer = 'NAME';
int iErr;
do {
*(int *)(buffer + 4) = c > 0 ? MakeFCS (c, buffer + 16) : 0;
*(int *)(buffer + 8) = c;
*(int *)(buffer + 12) = count++;
iErr = L2CAPWrite (cid, c + 16, buffer);
if (c == 0)
break;
wprintf (L".");
c = fread (buffer + 16, 1, mtu, fp);
if (c > 0)
*(int *)buffer = 'DATA';
else {
*(int *)buffer = 'DONE';
c = 0;
}
} while (iErr == ERROR_SUCCESS);
free (buffer);
wprintf (L"\nL2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
continue;
} else if (wcsnicmp (szBuffer, L"rep ", 4) == 0) {
WCHAR *p = szBuffer + 4;
unsigned int n;
if (! GetDI(&p, &n)) {
wprintf (L"Syntax: n\n");
continue;
}
unsigned short cid;
if (! GetUS(&p, &cid)) {
wprintf (L"Syntax: cid\n");
continue;
}
for (int i = 0 ; i < (int)n ; ++i) {
int iErr = L2CAPWrite (cid, (wcslen (p) + 1) * sizeof(WCHAR), (unsigned char *)p);
wprintf (L"L2CAPWrite returns 0x%08x (%d)\n", iErr, iErr);
}
continue;
} else if (wcsnicmp (szBuffer, L"disconnect ", 11) == 0) {
WCHAR *p = szBuffer + 11;
unsigned short cid;
if (! GetUS(&p, &cid)) {
wprintf (L"Syntax: cid\n");
continue;
}
int iErr = L2CAPCloseCID (cid);
wprintf (L"L2CAPCloseCID returns 0x%08x (%d)\n", iErr, iErr);
continue;
} else if (wcsnicmp (szBuffer, L"rfcomm ", 7) == 0) {
ProcessRFCOMMCommand (szBuffer + 7);
continue;
} else if (wcsnicmp (szBuffer, L"open ", 5) == 0) {
WCHAR *p = szBuffer + 5;
} else if (wcsnicmp(szBuffer, L"nsInquiry", 8) == 0) {
WCHAR *p = szBuffer + 10;
TestSdpInquiry(p);
continue;
} else if (wcsnicmp(szBuffer, L"sdpAddRecord ",13) == 0) {
WCHAR *p = szBuffer + 13;
TestSdpAddRecord(p);
continue;
} else if (wcsnicmp(szBuffer, L"sdpDelRecord ",13) == 0) {
WCHAR *p = szBuffer + 13;
TestSdpDelRecord(p);
continue;
} else if (wcsnicmp(szBuffer, L"sdpServiceSearch ",17) == 0) {
WCHAR *p = szBuffer + 17;
TestSdpServiceSearch(p);
continue;
} else if (wcsnicmp(szBuffer, L"sdpAttribSearch ",16) == 0) {
WCHAR *p = szBuffer + 16;
TestSdpAttribSearch(p);
continue;
} else if (wcsnicmp(szBuffer, L"sdpServAttribSearch ",20) == 0) {
WCHAR *p = szBuffer + 20;
TestSdpServAttribSearch(p);
continue;
}
wprintf (L"Unknown command\n");
continue;
}
return 0;
}
#if defined (SDK_BUILD)
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR lpCmdLine, int nShowCmd) {
WCHAR *argv[2];
argv[0] = L"btloader";
argv[1] = NULL;
return wmain (1, argv);
}
extern "C" int _stricmp (const char *s1, const char *s2) {
while (*s1 && (toupper(*s1) == toupper(*s2))) {
++s1; ++s2;
}
return *s1 - *s2;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -