diff options
Diffstat (limited to 'mDNSResponder/Clients/PrinterSetupWizard/PrinterSetupWizardSheet.h')
-rw-r--r-- | mDNSResponder/Clients/PrinterSetupWizard/PrinterSetupWizardSheet.h | 352 |
1 files changed, 352 insertions, 0 deletions
diff --git a/mDNSResponder/Clients/PrinterSetupWizard/PrinterSetupWizardSheet.h b/mDNSResponder/Clients/PrinterSetupWizard/PrinterSetupWizardSheet.h new file mode 100644 index 00000000..45110434 --- /dev/null +++ b/mDNSResponder/Clients/PrinterSetupWizard/PrinterSetupWizardSheet.h @@ -0,0 +1,352 @@ +/* -*- Mode: C; tab-width: 4 -*- + * + * Copyright (c) 1997-2004 Apple Computer, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + + +#include "secondpage.h" +#include "thirdpage.h" +#include "fourthpage.h" +#include "UtilTypes.h" +#include "Logger.h" +#include "dns_sd.h" +#include <stdexcept> +#include <map> + +using namespace PrinterSetupWizard; + +// CPrinterSetupWizardSheet + +class CPrinterSetupWizardSheet : public CPropertySheet +{ +DECLARE_DYNAMIC(CPrinterSetupWizardSheet) + +public: + +struct WizardException +{ + CString text; + CString caption; +}; + +public: + +CPrinterSetupWizardSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); +virtual ~CPrinterSetupWizardSheet(); + +CPropertyPage* +GetLastPage(); + +void +SetLastPage(CPropertyPage * page ); + +void +SetSelectedPrinter(Printer * printer); + +Printer* +GetSelectedPrinter(); + +OSStatus +LoadPrinterDriver(const CString & filename); + +HCURSOR +GetCursor(); + +// +// handles end of process event +// +virtual LRESULT +OnProcessEvent(WPARAM inWParam, LPARAM inLParam); + +virtual LRESULT +OnSocketEvent(WPARAM inWParam, LPARAM inLParam); + +virtual BOOL +OnCommand(WPARAM wParam, LPARAM lParam); + +virtual BOOL +OnInitDialog(); + +virtual BOOL +OnSetCursor(CWnd * pWnd, UINT nHitTest, UINT message); + +virtual void +OnContextMenu(CWnd * pWnd, CPoint pos); + +afx_msg void +OnOK(); + +OSStatus +StartResolve( Printer * printer ); + +OSStatus +StopResolve( Printer * printer ); + +Printers m_printers; + +HCURSOR m_active; +HCURSOR m_arrow; +HCURSOR m_wait; + +protected: +DECLARE_MESSAGE_MAP() +CSecondPage m_pgSecond; +CThirdPage m_pgThird; +CFourthPage m_pgFourth; + +void +OnServiceResolved( + Service * service); + +void Init(void); + +private: + +// This is from <cups/http.h> +typedef enum http_encryption_e /**** HTTP encryption values ****/ +{ + HTTP_ENCRYPT_IF_REQUESTED, /* Encrypt if requested (TLS upgrade) */ + HTTP_ENCRYPT_NEVER, /* Never encrypt */ + HTTP_ENCRYPT_REQUIRED, /* Encryption is required (TLS upgrade) */ + HTTP_ENCRYPT_ALWAYS /* Always encrypt (SSL) */ +} http_encryption_t; + +typedef void* ( *httpConnectEncryptFunc )( const char* host, int port, http_encryption_t encryption ); +typedef http_encryption_t ( *cupsEncryptionFunc )( void ); +typedef void ( *cupsSetEncryptionFunc )( http_encryption_t e ); +typedef char* ( *cupsAdminCreateWindowsPPDFunc )( void * http, const char *dest, char *buffer, int bufsize ); + +class CUPSLibrary +{ +public: + +CUPSLibrary() + : + httpConnectEncrypt( NULL ), + cupsEncryption( NULL ), + cupsSetEncryption( NULL ), + cupsAdminCreateWindowsPPD( NULL ), + library( NULL ) +{ +#if defined( LIBCUPS_ENABLED ) + if ( ( library = LoadLibrary( TEXT( "libcups2.dll" ) ) ) != NULL ) + { + httpConnectEncrypt = ( httpConnectEncryptFunc ) GetProcAddress( library, "httpConnectEncrypt" ); + cupsEncryption = ( cupsEncryptionFunc ) GetProcAddress( library, "cupsEncryption" ); + cupsSetEncryption = ( cupsSetEncryptionFunc ) GetProcAddress( library, "cupsSetEncryption" ); + cupsAdminCreateWindowsPPD = ( cupsAdminCreateWindowsPPDFunc ) GetProcAddress( library, "cupsAdminCreateWindowsPPD" ); + } +#endif +} + +~CUPSLibrary() +{ + if ( library ) + { + FreeLibrary( library ); + library = NULL; + } +} + +BOOL +IsInstalled() +{ + return ( ( httpConnectEncrypt != NULL ) && ( cupsEncryption != NULL ) && ( cupsSetEncryption != NULL ) && ( cupsAdminCreateWindowsPPD != NULL ) ); +} + +httpConnectEncryptFunc httpConnectEncrypt; +cupsEncryptionFunc cupsEncryption; +cupsSetEncryptionFunc cupsSetEncryption; +cupsAdminCreateWindowsPPDFunc cupsAdminCreateWindowsPPD; + +private: + +HMODULE library; +}; + + +static void DNSSD_API +OnBrowse( + DNSServiceRef inRef, + DNSServiceFlags inFlags, + uint32_t inInterfaceIndex, + DNSServiceErrorType inErrorCode, + const char * inName, + const char * inType, + const char * inDomain, + void * inContext ); + +static void DNSSD_API +OnResolve( + DNSServiceRef inRef, + DNSServiceFlags inFlags, + uint32_t inInterfaceIndex, + DNSServiceErrorType inErrorCode, + const char * inFullName, + const char * inHostName, + uint16_t inPort, + uint16_t inTXTSize, + const char * inTXT, + void * inContext ); + +static void DNSSD_API +OnQuery( + DNSServiceRef inRef, + DNSServiceFlags inFlags, + uint32_t inInterfaceIndex, + DNSServiceErrorType inErrorCode, + const char * inFullName, + uint16_t inRRType, + uint16_t inRRClass, + uint16_t inRDLen, + const void * inRData, + uint32_t inTTL, + void * inContext); + +Printer* +OnAddPrinter( + uint32_t inInterfaceIndex, + const char * inName, + const char * inType, + const char * inDomain, + bool moreComing); + +OSStatus +OnRemovePrinter( + Printer * printer, + bool moreComing); + +OSStatus +OnAddService( + Printer * printer, + uint32_t inInterfaceIndex, + const char * inName, + const char * inType, + const char * inDomain); + +OSStatus +OnRemoveService( + Service * service); + +void +OnResolveService( + Service * service ); + +static bool +OrderServiceFunc( const Service * a, const Service * b ); + +static bool +OrderQueueFunc( const Queue * q1, const Queue * q2 ); + +OSStatus +StartOperation( DNSServiceRef ref ); + +OSStatus +StopOperation( DNSServiceRef & ref ); + +OSStatus +StartBrowse(); + +OSStatus +StopBrowse(); + +OSStatus +StartResolve( Service * service ); + +OSStatus +StopResolve( Service * service ); + +OSStatus +ParseTextRecord( Service * service, Queue * q, uint16_t inTXTSize, const char * inTXT ); + +OSStatus +LoadPrinterNames(); + +Printer* +Lookup( const char * name ); + +OSStatus +InstallPrinter(Printer * printer); + +OSStatus +InstallPrinterPort( Printer * printer, Service * service, DWORD protocol, Logger & log ); + +OSStatus +InstallPrinterPDLAndLPR(Printer * printer, Service * service, Logger & log); + +OSStatus +InstallPrinterIPP(Printer * printer, Service * service, Logger & log); + +OSStatus +InstallPrinterCUPS( Printer * printer, Service * service, CUPSLibrary & cupsLib ); + +OSStatus +InstallPrinterCUPS(Printer * printer, Service * service, CUPSLibrary & cupsLib, TCHAR * env ); + +static unsigned WINAPI +InstallDriverThread( LPVOID inParam ); + +typedef std::list<CString> PrinterNames; +typedef std::list<DNSServiceRef> ServiceRefList; +static CPrinterSetupWizardSheet * m_self; +PrinterNames m_printerNames; +Printer * m_selectedPrinter; +bool m_driverThreadFinished; +DWORD m_driverThreadExitCode; +ServiceRefList m_serviceRefList; +DNSServiceRef m_pdlBrowser; +DNSServiceRef m_lprBrowser; +DNSServiceRef m_ippBrowser; +DNSServiceRef m_resolver; + +CPropertyPage * m_lastPage; +}; + + +inline Printer* +CPrinterSetupWizardSheet::GetSelectedPrinter() +{ + return m_selectedPrinter; +} + + +inline HCURSOR +CPrinterSetupWizardSheet::GetCursor() +{ + return m_active; +} + + +inline CPropertyPage* +CPrinterSetupWizardSheet::GetLastPage() +{ + return m_lastPage; +} + + +inline void +CPrinterSetupWizardSheet::SetLastPage(CPropertyPage * lastPage) +{ + m_lastPage = lastPage; +} + + +// Service Types + +#define kPDLServiceType "_pdl-datastream._tcp." +#define kLPRServiceType "_printer._tcp." +#define kIPPServiceType "_ipp._tcp." |