windows-nt/Source/XPSP1/NT/shell/ext/netplwiz/pubwiz.h
2020-09-26 16:20:57 +08:00

179 lines
7.6 KiB
C

HRESULT GetStrFromAttribute(IXMLDOMNode *pdn, LPCTSTR pszAttribute, LPTSTR pszBuffer, int cch);
HRESULT SetAttributeFromStr(IXMLDOMNode *pdn, LPCTSTR pszAttribute, LPCTSTR pszValue);
HRESULT GetIntFromAttribute(IXMLDOMNode *pdn, LPCTSTR pszAttribute, int *piValue);
HRESULT CreateElement(IXMLDOMDocument *pdoc, LPCTSTR pszName, VARIANT *pvar, IXMLDOMElement **ppdelResult);
HRESULT CreateAndAppendElement(IXMLDOMDocument *pdoc, IXMLDOMNode *pdnParent, LPCTSTR pszName, VARIANT *pvar, IXMLDOMElement **ppdelOut);
void SpewXML(IUnknown *punk);
HRESULT GetURLFromElement(IXMLDOMNode *pdn, LPCTSTR pszElement, LPTSTR pszBuffer, int cch);
DWORD SHWNetGetConnection(LPCWSTR lpLocalName, LPCTSTR lpRemoteName, LPDWORD lpnLength);
// used to communicate between the transfer logic and the main page.
#define PWM_UPDATE WM_APP+1
#define PWM_TRANSFERCOMPLETE WM_APP+2
#define PWM_UPDATEICON WM_APP+3
// transfer manifest information, this is used to communicate between the site and the publishing
// wizard to move the files between the local storage and the site.
// <transfermanfiest>
// <folderlist>
// <folder destination="xyz"/>
// </folderlist>
// <filelist [usesfolders=-1]/>
// <file id=x source="path" size="xyz" destination="xyz" extension=".jpg">
// [<resize cx=<width> cy=<height> quality=<0-100>>]
// <metadata>
// <imageproperty id=""></imageproperty>
// </metadata>
// <post href="href" name="<name section>" [verb=""] [filename="filename"]
// <formdata name="<name section>"></formdata>
// </post>
// </filelist>
// <uploadinfo friendlyname="site name">
// <target [username="username"] href="http://www.diz.com</target"/>
// <netplace filename="filename" comment="link comment" href="http:/www.diz.com"/>
// <htmlui href="href://toopenwhenwizardcloses"/>
// <successpage href="http://www.diz.com/uploadok.htm"/>
// <favorite href="http://somesite.com" filename="" comment=""/>
// <failurepage href="http://www.diz.com/uploadok.htm/">
// </uploadinfo>
// </transfermanifest>
#define ELEMENT_TRANSFERMANIFEST L"transfermanifest"
#define ELEMENT_FOLDERS L"folderlist"
#define ELEMENT_FOLDER L"folder"
#define ATTRIBUTE_DESTINATION L"destination"
#define ELEMENT_FILES L"filelist"
#define ATTRIBUTE_HASFOLDERS L"usesfolders"
#define ELEMENT_FILE L"file"
#define ATTRIBUTE_ID L"id"
#define ATTRIBUTE_EXTENSION L"extension"
#define ATTRIBUTE_CONTENTTYPE L"contenttype"
#define ATTRIBUTE_SIZE L"size"
#define ATTRIBUTE_SOURCE L"source"
#define ATTRIBUTE_DESTINATION L"destination"
#define ELEMENT_METADATA L"metadata"
#define ELEMENT_IMAGEDATA L"imageproperty"
#define ATTRIBUTE_ID L"id"
#define ELEMENT_RESIZE L"resize"
#define ATTRIBUTE_CX L"cx"
#define ATTRIBUTE_CY L"cy"
#define ATTRIBUTE_QUALITY L"quality"
#define ELEMENT_POSTDATA L"post"
#define ATTRIBUTE_HREF L"href"
#define ATTRIBUTE_VERB L"verb"
#define ATTRIBUTE_NAME L"name"
#define ATTRIBUTE_FILENAME L"filename"
#define ELEMENT_FORMDATA L"formdata"
#define ATTRIBUTE_NAME L"name"
#define ELEMENT_UPLOADINFO L"uploadinfo"
#define ATTRIBUTE_FRIENDLYNAME L"friendlyname"
#define ELEMENT_TARGET L"target"
#define ATTRIBUTE_HREF L"href"
#define ATTRIBUTE_USERNAME L"username"
#define ELEMENT_NETPLACE L"netplace"
#define ATTRIBUTE_HREF L"href"
#define ATTRIBUTE_FILENAME L"filename"
#define ATTRIBUTE_COMMENT L"comment"
#define ELEMENT_HTMLUI L"htmlui"
#define ATTRIBUTE_HREF L"href"
#define ELEMENT_PUBLISHWIZARD L"publishwizard"
#define ATTRIBUTE_HREF L"href"
#define ELEMENT_SUCCESSPAGE L"successpage"
#define ATTRIBUTE_HREF L"href"
#define ELEMENT_FAILUREPAGE L"failurepage"
#define ATTRIBUTE_HREF L"href"
#define ELEMENT_CANCELLEDPAGE L"cancelledpage"
#define ATTRIBUTE_HREF L"href"
#define ELEMENT_FAVORITE L"favorite"
#define ATTRIBUTE_HREF L"href"
#define ATTRIBUTE_NAME L"name"
#define ATTRIBUTE_COMMENT L"comment"
// xpaths for common items
#define XPATH_MANIFEST ELEMENT_TRANSFERMANIFEST
#define XPATH_FOLDERSROOT ELEMENT_TRANSFERMANIFEST L"/" ELEMENT_FOLDERS
#define XPATH_FILESROOT ELEMENT_TRANSFERMANIFEST L"/" ELEMENT_FILES
#define XPATH_ALLFILESTOUPLOAD ELEMENT_TRANSFERMANIFEST L"/" ELEMENT_FILES L"/" ELEMENT_FILE
#define XPATH_UPLOADINFO ELEMENT_TRANSFERMANIFEST L"/" ELEMENT_UPLOADINFO
#define XPATH_UPLOADTARGET ELEMENT_TRANSFERMANIFEST L"/" ELEMENT_UPLOADINFO L"/" ELEMENT_TARGET
#define XPATH_PUBLISHWIZARD ELEMENT_TRANSFERMANIFEST L"/" ELEMENT_PUBLISHWIZARD
// stuff relating to the file transfer engine
typedef struct
{
HWND hwnd; // parent HWND for any messages / dialogs
DWORD dwFlags; // flags from original wizard ::SetOptions
BOOL fUsePost; // use post to transfer the bits
TCHAR szSiteName[MAX_PATH]; // site name - shown in wizard
TCHAR szSiteURL[MAX_PATH]; // site URL - opened in the browser
TCHAR szFileTarget[INTERNET_MAX_URL_LENGTH]; // destination for file copy
TCHAR szLinkTarget[INTERNET_MAX_URL_LENGTH]; // destination for favorites link etc
TCHAR szLinkName[MAX_PATH];
TCHAR szLinkDesc[MAX_PATH];
} TRANSFERINFO;
typedef struct
{
VARIANT varName; // name of the form value
VARIANT varValue; // its value
} FORMDATA;
typedef struct
{
BOOL fResizeOnUpload; // this item should be resized
LPITEMIDLIST pidl; // pidl of the item we are posting
TCHAR szFilename[MAX_PATH]; // filename to associate with the object
TCHAR szVerb[10]; // verb used for transfer
TCHAR szName[MAX_PATH]; // name for the object we are posting
TCHAR szURL[INTERNET_MAX_URL_LENGTH]; // destination for file copy
CDSA<FORMDATA> dsaFormData; // form data for extra information published
int cxResize; // height and width of item for resizing
int cyResize;
int iQuality;
IShellItem *psi; // shell item for each of the objects
IStream *pstrm; // posting stream (for file bits)
STATSTG ststg; // stat of the file
} TRANSFERITEM;
// post engines which handle the transfer of files accordingly
int _FreeTransferItems(TRANSFERITEM *pti, void *pvState = NULL);
HRESULT PublishViaCopyEngine(TRANSFERINFO *pti, CDPA<TRANSFERITEM> *pdpaItems, ITransferAdviseSink *ptas);
HRESULT PublishViaPost(TRANSFERINFO *pti, CDPA<TRANSFERITEM> *pdpaItems, ITransferAdviseSink *ptas);