summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/Clients/PrinterSetupWizard/PrinterSetupWizardSheet.h
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/Clients/PrinterSetupWizard/PrinterSetupWizardSheet.h')
-rw-r--r--mDNSResponder/Clients/PrinterSetupWizard/PrinterSetupWizardSheet.h352
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."