214 lines
6.4 KiB
C
214 lines
6.4 KiB
C
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1997.
|
||
|
//
|
||
|
// File: U P D I A G P . H
|
||
|
//
|
||
|
// Contents: Private definitions for UPDIAG
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
// Author: danielwe 28 Oct 1999
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
#ifndef _UPDIAGP_H
|
||
|
#define _UPDIAGP_H
|
||
|
|
||
|
#include <wininet.h>
|
||
|
#include <stdio.h>
|
||
|
#include "ssdpapi.h"
|
||
|
#include "updiag.h"
|
||
|
#include "util.h"
|
||
|
|
||
|
typedef BOOL (* PFNCMD)(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
|
||
|
static const DWORD MAX_DEV = 32;
|
||
|
static const DWORD MAX_SVC = 32;
|
||
|
static const DWORD MAX_EVTSRC = MAX_SVC;
|
||
|
static const DWORD MAX_CD = 100;
|
||
|
static const DWORD MAX_UCP = 5;
|
||
|
static const DWORD MAX_ARGS = 8;
|
||
|
static const DWORD MAX_RESULT = 32;
|
||
|
static const DWORD MAX_RESULT_MSGS = 256;
|
||
|
static const DWORD MAX_DEV_STACK = 8;
|
||
|
|
||
|
static const TCHAR c_szSeps[] = TEXT(" \n\r\t");
|
||
|
|
||
|
struct COMMAND
|
||
|
{
|
||
|
LPCTSTR szCommand;
|
||
|
LPCTSTR szCmdDesc;
|
||
|
DWORD dwCtx;
|
||
|
BOOL fValidOnMillen;
|
||
|
PFNCMD pfnCommand;
|
||
|
LPCTSTR szUsage;
|
||
|
};
|
||
|
|
||
|
struct UPNPDEV
|
||
|
{
|
||
|
BOOL fRoot;
|
||
|
|
||
|
UPNPSVC * rgSvcs[MAX_SVC];
|
||
|
DWORD cSvcs;
|
||
|
|
||
|
UPNPDEV * rgDevs[MAX_DEV];
|
||
|
DWORD cDevs;
|
||
|
|
||
|
TCHAR szFriendlyName[256];
|
||
|
TCHAR szUdn[256];
|
||
|
TCHAR szDeviceType[256];
|
||
|
TCHAR szPresentationUrl[256];
|
||
|
TCHAR szManufaturer[256];
|
||
|
TCHAR szManufaturerUrl[INTERNET_MAX_URL_LENGTH];
|
||
|
TCHAR szModelName[256];
|
||
|
TCHAR szModelNumber[256];
|
||
|
TCHAR szModelDesc[256];
|
||
|
TCHAR szModelUrl[INTERNET_MAX_URL_LENGTH];
|
||
|
TCHAR szUpc[256];
|
||
|
TCHAR szSerialNumber[256];
|
||
|
|
||
|
HANDLE hSvc[3];
|
||
|
};
|
||
|
|
||
|
enum RESULT_TYPE
|
||
|
{
|
||
|
RES_SUBS,
|
||
|
RES_FIND,
|
||
|
RES_NOTIFY,
|
||
|
};
|
||
|
|
||
|
struct UPNPRESULT
|
||
|
{
|
||
|
SSDP_MESSAGE * rgmsgResult[MAX_RESULT_MSGS];
|
||
|
DWORD cResult;
|
||
|
TCHAR szType[256];
|
||
|
HANDLE hResult;
|
||
|
RESULT_TYPE resType;
|
||
|
};
|
||
|
|
||
|
struct UPNPUCP
|
||
|
{
|
||
|
TCHAR szName[256];
|
||
|
UPNPRESULT * rgResults[MAX_RESULT];
|
||
|
DWORD cResults;
|
||
|
};
|
||
|
|
||
|
enum ECMD_CONTEXT
|
||
|
{
|
||
|
CTX_ROOT = 0x00000001, // Root context (start of app)
|
||
|
CTX_DEVICE = 0x00000002, // Looking at specific device
|
||
|
CTX_CD_SVC = 0x00000004, // Looking at specific service on CD
|
||
|
CTX_EVTSRC = 0x00000008, // Looking at specific event source
|
||
|
CTX_RESULT = 0x00000010, // Looking at specific search/subscription result
|
||
|
CTX_UCP = 0x00000020, // Root of UCP context
|
||
|
CTX_CD = 0x00000040, // Root of CD context
|
||
|
CTX_UCP_SVC = 0x00000200, // Looking at specific service on UCP
|
||
|
|
||
|
CTX_AUTO = 0x80000000, // Automation only (won't appear in menus)
|
||
|
CTX_ANY = 0xFFFFFFFF, // Any context
|
||
|
};
|
||
|
|
||
|
struct UPDIAG_CONTEXT
|
||
|
{
|
||
|
ECMD_CONTEXT ectx;
|
||
|
UPNPDEV * pdevCur[MAX_DEV_STACK];
|
||
|
DWORD idevStackIndex;
|
||
|
UPNPSVC * psvcCur;
|
||
|
UPNPUCP * pucpCur;
|
||
|
UPNPRESULT * presCur;
|
||
|
};
|
||
|
|
||
|
struct UPDIAG_PARAMS
|
||
|
{
|
||
|
UPNPDEV * rgCd[MAX_CD];
|
||
|
DWORD cCd;
|
||
|
|
||
|
UPNPUCP * rgUcp[MAX_UCP];
|
||
|
DWORD cUcp;
|
||
|
};
|
||
|
|
||
|
extern const DEMO_SERVICE_CTL c_rgSvc[];
|
||
|
extern const DWORD c_cDemoSvc;
|
||
|
|
||
|
extern UPDIAG_PARAMS g_params;
|
||
|
extern UPDIAG_CONTEXT g_ctx;
|
||
|
extern SHARED_DATA * g_pdata;
|
||
|
extern HANDLE g_hEvent;
|
||
|
extern HANDLE g_hEventRet;
|
||
|
extern HANDLE g_hEventCleanup;
|
||
|
extern HANDLE g_hMutex;
|
||
|
extern HANDLE g_hThreadTime;
|
||
|
|
||
|
VOID Usage(DWORD iCmd);
|
||
|
BOOL DoHelp(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoBack(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoRoot(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoFindServices(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoListEventSources(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoExit(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoAlive(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoNothing(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoSleep(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoInfo(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoPrompt(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoScript(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoNewCd(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoDelCd(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoNewUcp(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoDelUcp(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoSwitchUcp(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoSwitchCd(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoSwitchEs(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoSwitchSvc(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoSwitchSearch(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoUnsubscribe(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoNewService(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoListDevices(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoListUcp(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoListServices(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoSubmitEvent(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoListProps(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
VOID DoEvtSrcInfo(VOID);
|
||
|
BOOL DoSubscribe(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
|
||
|
BOOL DoListUpnpResultMsgs(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoListUpnpResults(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoSwitchResult(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoDelResult(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
|
||
|
BOOL DoPrintSST(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
BOOL DoPrintActionSet(DWORD iCmd, DWORD cArgs, LPTSTR *rgArgs);
|
||
|
|
||
|
VOID NotifyCallback(SSDP_CALLBACK_TYPE ct,
|
||
|
CONST SSDP_MESSAGE *pSsdpService,
|
||
|
LPVOID pContext);
|
||
|
|
||
|
DWORD WINAPI RequestHandlerThreadStart(LPVOID pvParam);
|
||
|
|
||
|
VOID CleanupUcp(UPNPUCP *pucp);
|
||
|
VOID CleanupCd(UPNPDEV *pcd);
|
||
|
VOID CleanupResult(UPNPRESULT *psrch);
|
||
|
VOID CleanupService(UPNPSVC *psvc);
|
||
|
|
||
|
UPNPSVC *PSvcFromId(LPCTSTR szId);
|
||
|
|
||
|
VOID LocalFreeSsdpMessage(PSSDP_MESSAGE pSsdpMessage);
|
||
|
|
||
|
DWORD WINAPI TimeThreadProc(LPVOID lpvThreadParam);
|
||
|
|
||
|
// Device stack functions
|
||
|
//
|
||
|
UPNPDEV *PDevCur(VOID);
|
||
|
VOID PushDev(UPNPDEV *pdev);
|
||
|
UPNPDEV *PopDev(VOID);
|
||
|
|
||
|
// For filetime coversions
|
||
|
//
|
||
|
#define _SECOND ((__int64) 10000000)
|
||
|
#define _MINUTE (60 * _SECOND)
|
||
|
#define _HOUR (60 * _MINUTE)
|
||
|
#define _DAY (24 * _HOUR)
|
||
|
|
||
|
#endif // _UPDIAGP_H
|