summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/Clients/PrinterSetupWizard/UtilTypes.h
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/Clients/PrinterSetupWizard/UtilTypes.h')
-rw-r--r--mDNSResponder/Clients/PrinterSetupWizard/UtilTypes.h280
1 files changed, 280 insertions, 0 deletions
diff --git a/mDNSResponder/Clients/PrinterSetupWizard/UtilTypes.h b/mDNSResponder/Clients/PrinterSetupWizard/UtilTypes.h
new file mode 100644
index 00000000..dc0ae10e
--- /dev/null
+++ b/mDNSResponder/Clients/PrinterSetupWizard/UtilTypes.h
@@ -0,0 +1,280 @@
+/* -*- 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 <dns_sd.h>
+#include <string>
+#include <list>
+#include <DebugServices.h>
+
+class CPrinterSetupWizardSheet;
+
+#define kDefaultPriority 50
+#define kDefaultQTotal 1
+
+namespace PrinterSetupWizard
+{
+struct Printer;
+struct Service;
+struct Queue;
+struct Manufacturer;
+struct Model;
+
+typedef std::list<Queue*> Queues;
+typedef std::list<Printer*> Printers;
+typedef std::list<Service*> Services;
+typedef std::list<Model*> Models;
+
+struct Printer
+{
+ Printer();
+
+ ~Printer();
+
+ Service*
+ LookupService
+ (
+ const std::string & type
+ );
+
+ CPrinterSetupWizardSheet * window;
+ HTREEITEM item;
+
+ //
+ // These are from the browse reply
+ //
+ std::string name;
+ CString displayName;
+ CString actualName;
+
+ //
+ // These keep track of the different services associated with this printer.
+ // the services are ordered according to preference.
+ //
+ Services services;
+
+ //
+ // these are derived from the printer matching code
+ //
+ // if driverInstalled is false, then infFileName should
+ // have an absolute path to the printers inf file. this
+ // is used to install the printer from printui.dll
+ //
+ // if driverInstalled is true, then model is the name
+ // of the driver to use in AddPrinter
+ //
+ bool driverInstalled;
+ CString infFileName;
+ CString manufacturer;
+ CString displayModelName;
+ CString modelName;
+ CString portName;
+ bool deflt;
+
+ // This let's us know that this printer was discovered via OSX Printer Sharing.
+ // We use this knowledge to workaround a problem with OS X Printer sharing.
+
+ bool isCUPSPrinter;
+
+ //
+ // state
+ //
+ unsigned resolving;
+ bool installed;
+};
+
+
+struct Service
+{
+ Service();
+
+ ~Service();
+
+ Queue*
+ SelectedQueue();
+
+ void
+ EmptyQueues();
+
+ Printer * printer;
+ uint32_t ifi;
+ std::string type;
+ std::string domain;
+
+ //
+ // these are from the resolve
+ //
+ DNSServiceRef serviceRef;
+ CString hostname;
+ unsigned short portNumber;
+ CString protocol;
+ unsigned short qtotal;
+
+ //
+ // There will usually one be one of these, however
+ // this will handle printers that have multiple
+ // queues. These are ordered according to preference.
+ //
+ Queues queues;
+
+ //
+ // Reference count
+ //
+ unsigned refs;
+};
+
+
+struct Queue
+{
+ Queue();
+
+ ~Queue();
+
+ CString name;
+ uint32_t priority;
+ CString pdl;
+ CString usb_MFG;
+ CString usb_MDL;
+ CString description;
+ CString location;
+ CString product;
+};
+
+
+struct Manufacturer
+{
+ CString name;
+ Models models;
+
+ Model*
+ find( const CString & name );
+};
+
+
+struct Model
+{
+ bool driverInstalled;
+ CString infFileName;
+ CString displayName;
+ CString name;
+};
+
+
+inline
+Printer::Printer()
+ :
+ isCUPSPrinter( false )
+{
+}
+
+inline
+Printer::~Printer()
+{
+ while ( services.size() > 0 )
+ {
+ Service * service = services.front();
+ services.pop_front();
+ delete service;
+ }
+}
+
+inline Service*
+Printer::LookupService
+(
+ const std::string & type
+)
+{
+ Services::iterator it;
+
+ for ( it = services.begin(); it != services.end(); it++ )
+ {
+ Service * service = *it;
+
+ if ( strcmp(service->type.c_str(), type.c_str()) == 0 )
+ {
+ return service;
+ }
+ }
+
+ return NULL;
+}
+
+inline
+Service::Service()
+ :
+ qtotal(kDefaultQTotal)
+{
+}
+
+inline
+Service::~Service()
+{
+ check( serviceRef == NULL );
+
+ EmptyQueues();
+}
+
+inline Queue*
+Service::SelectedQueue()
+{
+ return queues.front();
+}
+
+inline void
+Service::EmptyQueues()
+{
+ while ( queues.size() > 0 )
+ {
+ Queue * q = queues.front();
+ queues.pop_front();
+ delete q;
+ }
+}
+
+inline
+Queue::Queue()
+ :
+ priority(kDefaultPriority)
+{
+}
+
+inline
+Queue::~Queue()
+{
+}
+
+inline Model*
+Manufacturer::find( const CString & name )
+{
+ Models::iterator it;
+
+ for ( it = models.begin(); it != models.end(); it++ )
+ {
+ Model * model = *it;
+
+ if ( model->name == name )
+ {
+ return model;
+ }
+ }
+
+ return NULL;
+}
+}
+
+