You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
932 lines
23 KiB
932 lines
23 KiB
/*++
|
|
|
|
Copyright (c) 1994 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
apitest.c
|
|
|
|
Abstract:
|
|
|
|
Program to test DAV
|
|
|
|
Author:
|
|
|
|
Shishir Pardikar (shishirp) 4-24-97
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#include <wininet.h>
|
|
#include <winnetwk.h>
|
|
|
|
//=================================================================================
|
|
#define MAX_COMMAND_ARGS 32
|
|
#define DEFAULT_BUFFER_SIZE 1024 // 1k
|
|
//=================================================================================
|
|
|
|
// The order of these must match the order in GlobalCommandInfo[]
|
|
typedef enum _COMMAND_CODE {
|
|
CmdDAVGetProp,
|
|
CmdDAVSetProp,
|
|
CmdDAVEnumServer,
|
|
CmdGetSpace,
|
|
CmdFreeSpace,
|
|
CmdHelp,
|
|
CmdQuit,
|
|
UnknownCommand
|
|
} COMMAND_CODE, *LPCOMMAND_CODE;
|
|
|
|
typedef struct _COMMAND_INFO {
|
|
LPSTR CommandName;
|
|
LPSTR CommandParams;
|
|
COMMAND_CODE CommandCode;
|
|
} COMMAND_INFO, *LPCOMMAND_INFO;
|
|
|
|
DWORD
|
|
ProcessDAVSetProp(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
);
|
|
|
|
DWORD
|
|
ProcessDAVGetProp(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
);
|
|
|
|
DWORD
|
|
ProcessDAVEnumServer(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
);
|
|
|
|
|
|
DWORD
|
|
ProcessDAVGetSpace(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
);
|
|
|
|
DWORD
|
|
ProcessDAVFreeSpace(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
);
|
|
|
|
DWORD
|
|
APIENTRY
|
|
DavFreeUsedDiskSpace(
|
|
DWORD dwPercent
|
|
);
|
|
|
|
|
|
DWORD
|
|
APIENTRY
|
|
DavGetDiskSpaceUsage(
|
|
LPWSTR lptzLocation,
|
|
DWORD *lpdwSize,
|
|
ULARGE_INTEGER *lpMaxSpace,
|
|
ULARGE_INTEGER *lpUsedSpace
|
|
);
|
|
//=================================================================================
|
|
FILE *UncList = NULL;
|
|
LPSTR g_lpWriteFileBuf = NULL;
|
|
FILE *DumpUncList = NULL;
|
|
DWORD cCommands = 0;
|
|
DWORD cFails = 0;
|
|
DWORD g_dwNumIterations = 1;
|
|
DWORD g_dwIteration = 0;
|
|
DWORD g_dwNumCmdIterations = 1;
|
|
DWORD g_dwCmdIteration = 0;
|
|
DWORD g_dwFileSize = 0;
|
|
DWORD g_dwDiskCache = 0;
|
|
BOOL g_bWriteFile = FALSE;
|
|
BOOL g_bQuietMode = FALSE;
|
|
BOOL g_bPerfMode = FALSE;
|
|
BOOL g_bUseFile = FALSE;
|
|
|
|
COMMAND_INFO GlobalCommandInfo[] = {
|
|
{"GetProp", "Server", CmdDAVGetProp},
|
|
{"SetProp", "Server Property Value", CmdDAVSetProp},
|
|
{"Enum", "Enumerate shares", CmdDAVEnumServer},
|
|
{"GetSpace", "Get Used Disk Space", CmdGetSpace},
|
|
{"FreeSpace", "FreeSpace <percent of cache in decimal>", CmdFreeSpace},
|
|
{"Help", "", CmdHelp},
|
|
{"Quit", "", CmdQuit}
|
|
};
|
|
|
|
char szTestBuff[] = "00000888";
|
|
char szDavProviderName[] = "Web Client Network";
|
|
|
|
DWORD WINAPIV Format_String(LPSTR *plpsz, LPSTR lpszFmt, ...);
|
|
DWORD WINAPI Format_Error(DWORD dwErr, LPSTR *plpsz);
|
|
DWORD WINAPI Format_StringV(LPSTR *plpsz, LPCSTR lpszFmt, va_list *vArgs);
|
|
DWORD WINAPI Format_MessageV(DWORD dwFlags, DWORD dwErr, LPSTR *plpsz, LPCSTR lpszFmt, va_list *vArgs);
|
|
|
|
//=================================================================================
|
|
|
|
DWORD
|
|
ProcessCommandCode (
|
|
DWORD CommandCode,
|
|
DWORD CommandArgc,
|
|
LPSTR *CommandArgv
|
|
);
|
|
|
|
|
|
DWORD
|
|
GetLeafLenFromPath(
|
|
LPSTR lpszPath
|
|
);
|
|
|
|
|
|
char rgXmlHeader[] = "Content-Type: text/xml; charset=\"utf-8\"";
|
|
char rgXmlData[] =
|
|
//"<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r <D:propertyupdate xmlns:D=\"DAV:\" xmlns:Z=\"http://www.w3.com\"> \r <D:set><D:prop><Z:Win32FileAttributes>3</Z:Win32FileAttributes></D:prop></D:set></D:propertyupdate>";
|
|
"<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r <D:propertyupdate xmlns:D=\"DAV:\" xmlns:Z=\"http://www.w3.com\"> \r <D:set><D:prop><Z:Win32lastModifiedTime> 1000 2000 </Z:Win32lastModifiedTime></D:prop></D:set></D:propertyupdate>";
|
|
char rgXmlDataHeader[] = "<?xml version=\"1.0\" encoding=\"utf-8\" ?> \r <D:propertyupdate xmlns:D=\"DAV:\" xmlns:Z=\"http://www.w3.com\"> \r <D:set><D:prop>";
|
|
char rgXmlDataTrailer[] = "</D:prop></D:set></D:propertyupdate>";
|
|
char rgLastModifiedTimeTagHeader[] = "<Z:Win32lastModifiedTime>";
|
|
char rgLastModifiedTimeTagTrailer[] = "</Z:Win32lastModifiedTime>";
|
|
|
|
char Buffer[4096];
|
|
|
|
|
|
//=================================================================================
|
|
#if DBG
|
|
|
|
#define TestDbgAssert(Predicate) \
|
|
{ \
|
|
if (!(Predicate)) \
|
|
TestDbgAssertFailed( #Predicate, __FILE__, __LINE__, NULL ); \
|
|
}
|
|
|
|
VOID
|
|
TestDbgAssertFailed(
|
|
LPSTR FailedAssertion,
|
|
LPSTR FileName,
|
|
DWORD LineNumber,
|
|
LPSTR Message
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Assertion failed.
|
|
|
|
Arguments:
|
|
|
|
FailedAssertion :
|
|
|
|
FileName :
|
|
|
|
LineNumber :
|
|
|
|
Message :
|
|
|
|
Return Value:
|
|
|
|
none.
|
|
|
|
--*/
|
|
{
|
|
|
|
printf("Assert @ %s \n", FailedAssertion );
|
|
printf("Assert Filename, %s \n", FileName );
|
|
printf("Line Num. = %ld.\n", LineNumber );
|
|
printf("Message is %s\n", Message );
|
|
|
|
DebugBreak();
|
|
}
|
|
#else
|
|
|
|
#define TestDbgAssert(_x_)
|
|
|
|
#endif // DBG
|
|
|
|
//=================================================================================
|
|
VOID
|
|
ParseArguments(
|
|
LPSTR InBuffer,
|
|
LPSTR *CArgv,
|
|
LPDWORD CArgc
|
|
)
|
|
{
|
|
LPSTR CurrentPtr = InBuffer;
|
|
DWORD i = 0;
|
|
DWORD Cnt = 0;
|
|
|
|
for ( ;; ) {
|
|
|
|
//
|
|
// skip blanks.
|
|
//
|
|
|
|
while( *CurrentPtr == ' ' ) {
|
|
CurrentPtr++;
|
|
}
|
|
|
|
if( *CurrentPtr == '\0' ) {
|
|
break;
|
|
}
|
|
|
|
CArgv[i++] = CurrentPtr;
|
|
|
|
//
|
|
// go to next space.
|
|
//
|
|
|
|
while( (*CurrentPtr != '\0') &&
|
|
(*CurrentPtr != '\n') ) {
|
|
if( *CurrentPtr == '"' ) { // Deal with simple quoted args
|
|
if( Cnt == 0 )
|
|
CArgv[i-1] = ++CurrentPtr; // Set arg to after quote
|
|
else
|
|
*CurrentPtr = '\0'; // Remove end quote
|
|
Cnt = !Cnt;
|
|
}
|
|
if( (Cnt == 0) && (*CurrentPtr == ' ') || // If we hit a space and no quotes yet we are done with this arg
|
|
(*CurrentPtr == '\0') )
|
|
break;
|
|
CurrentPtr++;
|
|
}
|
|
|
|
if( *CurrentPtr == '\0' ) {
|
|
break;
|
|
}
|
|
|
|
*CurrentPtr++ = '\0';
|
|
}
|
|
|
|
*CArgc = i;
|
|
return;
|
|
}
|
|
|
|
#ifdef MAYBE
|
|
//=================================================================================
|
|
LPSTR
|
|
GetUncFromFile ()
|
|
{
|
|
if (!UncList)
|
|
{
|
|
UncList = fopen ("Unclist", "r");
|
|
if (UncList == NULL)
|
|
return NULL;
|
|
}
|
|
if (fgets( UncBuffer, DEFAULT_BUFFER_SIZE, UncList))
|
|
{
|
|
UncBuffer[strlen(UncBuffer) -1] = '\0'; //kill line feed for no param cmds
|
|
return UncBuffer;
|
|
}
|
|
else
|
|
{
|
|
fclose (UncList);
|
|
UncList = NULL;
|
|
return GetUncFromFile();
|
|
}
|
|
}
|
|
|
|
#endif
|
|
//=================================================================================
|
|
COMMAND_CODE
|
|
DecodeCommand(
|
|
LPSTR CommandName
|
|
)
|
|
{
|
|
DWORD i;
|
|
DWORD NumCommands;
|
|
|
|
NumCommands = sizeof(GlobalCommandInfo) / sizeof(COMMAND_INFO);
|
|
TestDbgAssert( NumCommands <= UnknownCommand );
|
|
for( i = 0; i < NumCommands; i++) {
|
|
if(( lstrcmpi( CommandName, GlobalCommandInfo[i].CommandName ) == 0 )){
|
|
return( GlobalCommandInfo[i].CommandCode );
|
|
}
|
|
}
|
|
return( UnknownCommand );
|
|
}
|
|
|
|
//=================================================================================
|
|
VOID
|
|
PrintCommands(
|
|
VOID
|
|
)
|
|
{
|
|
DWORD i;
|
|
DWORD NumCommands;
|
|
|
|
NumCommands = sizeof(GlobalCommandInfo) / sizeof(COMMAND_INFO);
|
|
TestDbgAssert( NumCommands <= UnknownCommand );
|
|
for( i = 0; i < NumCommands; i++) {
|
|
fprintf(stderr, " %s (%s)\n",
|
|
GlobalCommandInfo[i].CommandName,
|
|
GlobalCommandInfo[i].CommandParams );
|
|
}
|
|
}
|
|
|
|
//=================================================================================
|
|
VOID
|
|
DisplayUsage(
|
|
VOID
|
|
)
|
|
{
|
|
DWORD dwTemp;
|
|
char InBuffer[ DEFAULT_BUFFER_SIZE];
|
|
|
|
memset( InBuffer, 0, sizeof(InBuffer));
|
|
if (dwTemp = GetEnvironmentVariable("USERPROFILE", InBuffer, DEFAULT_BUFFER_SIZE))
|
|
{
|
|
fprintf(stderr, "Got var %x\n", dwTemp );
|
|
fprintf(stderr, "%S\n", InBuffer );
|
|
}
|
|
else
|
|
{
|
|
fprintf(stderr, "No var\n" );
|
|
fprintf(stderr, "Error %x\n", GetLastError());
|
|
}
|
|
|
|
fprintf(stderr, "Usage: command <command parameters>\n" );
|
|
|
|
sscanf(szTestBuff, "%x", &dwTemp);
|
|
fprintf(stderr, "%x \n", dwTemp);
|
|
|
|
fprintf(stderr, "Commands : \n");
|
|
|
|
|
|
PrintCommands();
|
|
|
|
return;
|
|
}
|
|
|
|
//=================================================================================
|
|
FILETIME
|
|
GetGmtTime(
|
|
VOID
|
|
)
|
|
{
|
|
SYSTEMTIME SystemTime;
|
|
FILETIME Time;
|
|
|
|
GetSystemTime( &SystemTime );
|
|
SystemTimeToFileTime( &SystemTime, &Time );
|
|
|
|
return( Time );
|
|
}
|
|
|
|
//=================================================================================
|
|
|
|
//=================================================================================
|
|
DWORD
|
|
ProcessCommandCode (
|
|
DWORD CommandCode,
|
|
DWORD CommandArgc,
|
|
LPSTR *CommandArgv
|
|
)
|
|
{
|
|
DWORD Error = ERROR_SUCCESS;
|
|
|
|
switch( CommandCode ) {
|
|
case CmdDAVGetProp:
|
|
Error = ProcessDAVGetProp(CommandArgc, CommandArgv);
|
|
break;
|
|
case CmdDAVSetProp:
|
|
Error = ProcessDAVSetProp(CommandArgc, CommandArgv);
|
|
break;
|
|
case CmdDAVEnumServer:
|
|
Error = ProcessDAVEnumServer(CommandArgc, CommandArgv);
|
|
case CmdGetSpace:
|
|
Error = ProcessDAVGetSpace(CommandArgc, CommandArgv);
|
|
break;
|
|
case CmdFreeSpace:
|
|
Error = ProcessDAVFreeSpace(CommandArgc, CommandArgv);
|
|
break;
|
|
case CmdHelp:
|
|
DisplayUsage();
|
|
break;
|
|
case CmdQuit :
|
|
exit (0);
|
|
|
|
default:
|
|
TestDbgAssert( FALSE );
|
|
fprintf(stderr, "Unknown Command Specified.\n");
|
|
DisplayUsage();
|
|
break;
|
|
}
|
|
cCommands++;
|
|
|
|
if( Error != ERROR_SUCCESS ) {
|
|
LPSTR lpstr;
|
|
|
|
cFails++;
|
|
Format_Error(Error, &lpstr);
|
|
printf("FAILED (%s), %ld-%s.\n",
|
|
GlobalCommandInfo[CommandCode].CommandName, Error, lpstr );
|
|
LocalFree(lpstr);
|
|
}
|
|
else {
|
|
if(!g_bQuietMode)
|
|
printf("Command (%s) successfully completed.\n", GlobalCommandInfo[CommandCode].CommandName );
|
|
}
|
|
return Error;
|
|
}
|
|
|
|
|
|
//=================================================================================
|
|
VOID
|
|
__cdecl
|
|
main(
|
|
int argc,
|
|
char *argv[]
|
|
)
|
|
{
|
|
|
|
DWORD Error;
|
|
COMMAND_CODE CommandCode;
|
|
CHAR InBuffer[DEFAULT_BUFFER_SIZE];
|
|
DWORD CArgc;
|
|
LPSTR CArgv[MAX_COMMAND_ARGS];
|
|
unsigned u1 = 1, u2 = 0xffffffff;
|
|
|
|
DWORD CommandArgc;
|
|
LPSTR *CommandArgv;
|
|
|
|
|
|
|
|
/* must check for batch mode. if there are command line parms, assume batch mode */
|
|
if (argc > 1)
|
|
{
|
|
//this means that the arguments translate directly into CommandArgc....
|
|
CommandCode = DecodeCommand( argv[1] );
|
|
if( CommandCode == UnknownCommand ) {
|
|
printf("Unknown Command Specified.\n");
|
|
return;
|
|
}
|
|
|
|
CommandArgc = argc - 2;
|
|
CommandArgv = &argv[2];
|
|
|
|
Error = ProcessCommandCode (CommandCode,CommandArgc,CommandArgv);
|
|
|
|
if (DumpUncList)
|
|
fclose(DumpUncList);
|
|
if (UncList)
|
|
fclose(UncList);
|
|
|
|
return;
|
|
}
|
|
|
|
DisplayUsage();
|
|
|
|
for(;;) {
|
|
|
|
fprintf(stderr, "Command : " );
|
|
|
|
gets( InBuffer );
|
|
|
|
CArgc = 0;
|
|
ParseArguments( InBuffer, CArgv, &CArgc );
|
|
|
|
if( CArgc < 1 ) {
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// decode command.
|
|
//
|
|
|
|
CommandCode = DecodeCommand( CArgv[0] );
|
|
if( CommandCode == UnknownCommand ) {
|
|
fprintf(stderr, "Unknown Command Specified.\n");
|
|
continue;
|
|
}
|
|
|
|
CommandArgc = CArgc - 1;
|
|
CommandArgv = &CArgv[1];
|
|
|
|
Error = ProcessCommandCode (CommandCode,CommandArgc,CommandArgv);
|
|
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
//=================================================================================
|
|
DWORD
|
|
GetLeafLenFromPath(
|
|
LPSTR lpszPath
|
|
)
|
|
{
|
|
DWORD len;
|
|
LPSTR lpT;
|
|
|
|
if(!lpszPath)
|
|
return(0);
|
|
|
|
len = lstrlen(lpszPath);
|
|
|
|
if (len == 0) {
|
|
|
|
return (len);
|
|
|
|
}
|
|
|
|
lpT = lpszPath+len-1;
|
|
if (*lpT =='\\') {
|
|
--lpT;
|
|
}
|
|
for (; lpT >= lpszPath; --lpT) {
|
|
if (*lpT == '\\') {
|
|
break;
|
|
}
|
|
}
|
|
return (lstrlen(lpT));
|
|
}
|
|
|
|
//=================================================================================
|
|
DWORD WINAPIV Format_String(LPSTR *plpsz, LPSTR lpszFmt, ...)
|
|
{
|
|
const char c_Func_Name[] = "[Format_String] ";
|
|
DWORD dwRet;
|
|
va_list vArgs;
|
|
|
|
va_start (vArgs, lpszFmt);
|
|
dwRet = Format_StringV(plpsz, lpszFmt, &vArgs);
|
|
va_end (vArgs);
|
|
|
|
return(dwRet);
|
|
}
|
|
|
|
//=================================================================================
|
|
DWORD WINAPI Format_Error(DWORD dwErr, LPSTR *plpsz)
|
|
{
|
|
DWORD dwRet;
|
|
|
|
if(dwErr != ERROR_SUCCESS)
|
|
{
|
|
dwRet = Format_MessageV(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
|
|
dwErr, plpsz, NULL, NULL);
|
|
}
|
|
else
|
|
{
|
|
const char szMsg[] = "No Error";
|
|
Format_String(plpsz, (LPSTR)szMsg);
|
|
dwRet = lstrlen(szMsg);
|
|
}
|
|
|
|
return(dwRet);
|
|
}
|
|
|
|
//=================================================================================
|
|
DWORD WINAPI Format_StringV(LPSTR *plpsz, LPCSTR lpszFmt, va_list *vArgs)
|
|
{
|
|
return(Format_MessageV(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,
|
|
0, plpsz, lpszFmt, vArgs));
|
|
}
|
|
|
|
// ***************************************************************************
|
|
DWORD WINAPI Format_MessageV(DWORD dwFlags, DWORD dwErr, LPSTR *plpsz, LPCSTR lpszFmt, va_list *vArgs)
|
|
{
|
|
const char c_Func_Name[] = "[Format_MessageV]";
|
|
|
|
DWORD dwRet;
|
|
DWORD dwGLE;
|
|
|
|
*plpsz = NULL;
|
|
dwRet = FormatMessage(dwFlags, lpszFmt, dwErr, 0, (LPSTR) plpsz, 0, vArgs);
|
|
|
|
if (!dwRet || !*plpsz)
|
|
{
|
|
dwGLE = GetLastError();
|
|
printf("%s FormatMessage Failed: %s. dwRet: %#lx!. *plpsz:%#lx! GLE:%d\r\n", c_Func_Name, lpszFmt, dwRet, *plpsz, dwGLE);
|
|
|
|
if (*plpsz)
|
|
LocalFree ((HLOCAL) *plpsz);
|
|
*plpsz = NULL;
|
|
return 0;
|
|
}
|
|
|
|
return(dwRet);
|
|
}
|
|
|
|
|
|
|
|
DWORD
|
|
ProcessDAVGetProp(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
)
|
|
{
|
|
HINTERNET hDavOpen=NULL, hDavConnect = NULL, hRequest = NULL;
|
|
DWORD dwError = ERROR_SUCCESS;
|
|
LPSTR lpRequestHeader=NULL, lpOptionalData = NULL, lpTemp;
|
|
|
|
if (argc < 2)
|
|
{
|
|
printf("GetProp Needs more args\n");
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
hDavOpen = InternetOpen("DAVtest",
|
|
INTERNET_OPEN_TYPE_PRECONFIG,
|
|
NULL,
|
|
NULL,
|
|
0);
|
|
if (hDavOpen == NULL) {
|
|
dwError = GetLastError();
|
|
goto bailout;
|
|
}
|
|
|
|
hDavConnect = InternetConnect( hDavOpen,
|
|
argv[0],
|
|
INTERNET_DEFAULT_HTTP_PORT,
|
|
NULL,
|
|
NULL,
|
|
INTERNET_SERVICE_HTTP,
|
|
0,
|
|
0);
|
|
if (hDavConnect == NULL)
|
|
{
|
|
dwError = GetLastError();
|
|
goto bailout;
|
|
}
|
|
|
|
hRequest = HttpOpenRequest(hDavConnect,
|
|
"PROPFIND",
|
|
argv[1],
|
|
HTTP_VERSION,
|
|
NULL,
|
|
NULL,
|
|
INTERNET_FLAG_KEEP_CONNECTION |
|
|
INTERNET_FLAG_RELOAD |
|
|
INTERNET_FLAG_NO_AUTO_REDIRECT,
|
|
0);
|
|
if (hRequest == NULL)
|
|
{
|
|
dwError = GetLastError();
|
|
goto bailout;
|
|
}
|
|
|
|
if (!HttpSendRequest(hRequest, NULL, 0, NULL, 0))
|
|
{
|
|
dwError = GetLastError();
|
|
}
|
|
|
|
bailout:
|
|
|
|
if (hRequest)
|
|
{
|
|
InternetCloseHandle(hRequest);
|
|
}
|
|
if (hDavConnect)
|
|
{
|
|
InternetCloseHandle(hDavConnect);
|
|
}
|
|
if (hDavOpen)
|
|
{
|
|
InternetCloseHandle(hDavOpen);
|
|
}
|
|
|
|
return dwError;
|
|
}
|
|
|
|
DWORD
|
|
ProcessDAVSetProp(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
)
|
|
{
|
|
HINTERNET hDavOpen=NULL, hDavConnect = NULL, hRequest = NULL;
|
|
DWORD dwError = ERROR_SUCCESS, dwLen;
|
|
LPSTR lpRequestHeader=NULL, lpOptionalData = NULL, lpTemp;
|
|
SYSTEMTIME sSystemTime;
|
|
char sTimeBuff[INTERNET_RFC1123_BUFSIZE+10];
|
|
|
|
if (argc < 2)
|
|
{
|
|
printf("SetProp Needs more args\n");
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
hDavOpen = InternetOpen("DAVtest",
|
|
INTERNET_OPEN_TYPE_PRECONFIG,
|
|
NULL,
|
|
NULL,
|
|
0);
|
|
if (hDavOpen == NULL) {
|
|
dwError = GetLastError();
|
|
goto bailout;
|
|
}
|
|
|
|
hDavConnect = InternetConnect( hDavOpen,
|
|
argv[0],
|
|
INTERNET_DEFAULT_HTTP_PORT,
|
|
NULL,
|
|
NULL,
|
|
INTERNET_SERVICE_HTTP,
|
|
0,
|
|
0);
|
|
if (hDavConnect == NULL)
|
|
{
|
|
dwError = GetLastError();
|
|
goto bailout;
|
|
}
|
|
|
|
#if 0
|
|
hRequest = HttpOpenRequest(hDavConnect,
|
|
"PROPFIND",
|
|
argv[1],
|
|
HTTP_VERSION,
|
|
NULL,
|
|
NULL,
|
|
INTERNET_FLAG_KEEP_CONNECTION |
|
|
INTERNET_FLAG_RELOAD |
|
|
INTERNET_FLAG_NO_AUTO_REDIRECT,
|
|
0);
|
|
if (hRequest == NULL)
|
|
{
|
|
dwError = GetLastError();
|
|
goto bailout;
|
|
}
|
|
|
|
if (!HttpSendRequest(hRequest, NULL, 0, NULL, 0))
|
|
{
|
|
dwError = GetLastError();
|
|
}
|
|
#endif
|
|
|
|
hRequest = HttpOpenRequest(hDavConnect,
|
|
"PROPPATCH",
|
|
argv[1],
|
|
HTTP_VERSION,
|
|
NULL,
|
|
NULL,
|
|
INTERNET_FLAG_KEEP_CONNECTION |
|
|
INTERNET_FLAG_RELOAD |
|
|
INTERNET_FLAG_NO_AUTO_REDIRECT,
|
|
0);
|
|
if (hRequest == NULL)
|
|
{
|
|
dwError = GetLastError();
|
|
goto bailout;
|
|
}
|
|
|
|
memset(Buffer, 0, sizeof(Buffer));
|
|
|
|
lpTemp = Buffer;
|
|
|
|
strcpy(lpTemp, rgXmlDataHeader);
|
|
|
|
lpTemp += (sizeof(rgXmlDataHeader)-1);
|
|
|
|
memcpy(lpTemp, rgLastModifiedTimeTagHeader, (sizeof(rgLastModifiedTimeTagHeader)-1));
|
|
|
|
lpTemp += (sizeof(rgLastModifiedTimeTagHeader)-1);
|
|
|
|
GetSystemTime(&sSystemTime);
|
|
|
|
InternetTimeFromSystemTimeA(&sSystemTime, INTERNET_RFC1123_FORMAT, sTimeBuff, sizeof(sTimeBuff));
|
|
|
|
dwLen = strlen(sTimeBuff);
|
|
|
|
memcpy(lpTemp, sTimeBuff, dwLen);
|
|
|
|
lpTemp += dwLen;
|
|
|
|
memcpy(lpTemp, rgLastModifiedTimeTagTrailer, (sizeof(rgLastModifiedTimeTagTrailer)-1));
|
|
|
|
lpTemp += (sizeof(rgLastModifiedTimeTagTrailer)-1);
|
|
|
|
strcpy(lpTemp, rgXmlDataTrailer);
|
|
|
|
if (!HttpSendRequest(hRequest,
|
|
(LPVOID)rgXmlHeader,
|
|
strlen(rgXmlHeader),
|
|
(LPVOID)Buffer,
|
|
strlen(Buffer)))
|
|
{
|
|
dwError = GetLastError();
|
|
}
|
|
|
|
bailout:
|
|
|
|
if (hRequest)
|
|
{
|
|
InternetCloseHandle(hRequest);
|
|
}
|
|
if (hDavConnect)
|
|
{
|
|
InternetCloseHandle(hDavConnect);
|
|
}
|
|
if (hDavOpen)
|
|
{
|
|
InternetCloseHandle(hDavOpen);
|
|
}
|
|
|
|
return dwError;
|
|
}
|
|
|
|
|
|
DWORD
|
|
ProcessDAVEnumServer(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
)
|
|
{
|
|
HINTERNET hDavOpen=NULL, hDavConnect = NULL, hRequest = NULL;
|
|
DWORD dwError = ERROR_SUCCESS;
|
|
LPSTR lpRequestHeader=NULL, lpOptionalData = NULL, lpTemp;
|
|
NETRESOURCEA sRes;
|
|
HANDLE hEnum = 0;
|
|
char Buffer[4096];
|
|
|
|
|
|
if (argc < 1)
|
|
{
|
|
printf("EnumResource Needs more args\n");
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
memset(&sRes, 0, sizeof(sRes));
|
|
sRes.lpRemoteName = argv[0];
|
|
sRes.lpProvider = szDavProviderName;
|
|
|
|
if(WNetOpenEnumA(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, &sRes, &hEnum) == NO_ERROR)
|
|
{
|
|
DWORD dwCount, dwSize;
|
|
dwCount = 1;
|
|
dwSize = sizeof(Buffer);
|
|
while (WNetEnumResourceA(hEnum, &dwCount, Buffer, &dwSize)== NO_ERROR)
|
|
{
|
|
dwCount = 1;
|
|
dwSize = sizeof(Buffer);
|
|
printf("%s \n", ((LPNETRESOURCE)Buffer)->lpRemoteName);
|
|
}
|
|
WNetCloseEnum(hEnum);
|
|
}
|
|
else
|
|
{
|
|
dwError = GetLastError();
|
|
}
|
|
return dwError;
|
|
}
|
|
|
|
DWORD
|
|
ProcessDAVGetSpace(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
)
|
|
{
|
|
DWORD dwError = ERROR_SUCCESS;
|
|
ULARGE_INTEGER MaxSpace, UsedSpace;
|
|
WCHAR tzLocation[MAX_PATH];
|
|
DWORD dwSize;
|
|
|
|
dwSize = sizeof(tzLocation);
|
|
if ((dwError = DavGetDiskSpaceUsage(tzLocation, &dwSize, &MaxSpace, &UsedSpace)) == ERROR_SUCCESS)
|
|
{
|
|
printf("Location=%ls MaxSpace=%I64d UsedSpace=%I64d\n", tzLocation, MaxSpace, UsedSpace);
|
|
}
|
|
|
|
return dwError;
|
|
}
|
|
|
|
|
|
DWORD
|
|
ProcessDAVFreeSpace(
|
|
DWORD argc,
|
|
LPSTR *argv
|
|
)
|
|
{
|
|
DWORD dwError = ERROR_SUCCESS, dwPercent;
|
|
|
|
if (argc < 1)
|
|
{
|
|
printf("FreeSpace Needs more args\n");
|
|
return ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
if(sscanf(argv[0], "%d", &dwPercent) == 1)
|
|
{
|
|
dwError = DavFreeUsedDiskSpace(dwPercent);
|
|
}
|
|
else
|
|
{
|
|
dwError = ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
return dwError;
|
|
}
|
|
|
|
|
|
|
|
|
|
|