mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-06-10 23:13:11 +08:00

The sources can be obtained via: http://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-544.tar.gz
353 lines
7.8 KiB
C
353 lines
7.8 KiB
C
/* -*- 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."
|