
- Home
- Magazine
- Conference & Seminars
- News
- Archives
- Forums
- Store
- Directory
- Editorial
- Advertising
- User/Login
- Contact



Volume Number: 14 (1998)
Issue Number: 7
Column Tag: Emerging Technologies
by by the Apple Network Services Location Project Team
Edited by Peter N Lewis
When Apple introduced the Chooser and AppleTalk, they allowed users unprecedented ease-of-use in browsing for network services such as printers and file servers. With the introduction of the Network Services Location (NSL) Technology, Apple is bringing that same ease-of-use to the Internet. With NSL users have the ability to browse through Internet services such as FTP and HTTP via TCP/IP in the same way they have traditionally browsed for AppleTalk services using the Chooser. By adopting this technology, applications can provide a more intuitive and convenient method for users to access network services.
The NSL Technology is composed of a Manager and a set of plug-ins that gather data via particular network protocols (such as DNS). The NSL Manager provides a single API across any number of resource discovery protocols, and by developing additional plug-ins, new methods for resource discovery can be added with no additional work on the part of the application developer. In this article we will present the NSL technology and show you, the developer, how to incorporate it into your next project.
The Network Services Location Manager provides a protocol-independent way for applications to discover available network services with minimal network traffic. The NSL Manager provides:
A variety of applications can benefit from NSL technology. Calls to the NSL Manager can make these applications more intuitive and easier to use. For example:
The NSL Manager acts as an intermediary between the providers of network services and applications that want information about those services. Service applications register themselves with the NSL Manager and which then acts through NSL plug-ins to perform the actual searches. The NSL Manager can pass requests from applications to any plug-in that implements the NSL Manager API.
An NSL plug-in is an extension that makes itself available to the NSL Manager when the NSL Manager is initialized, but resides in memory only when it is responding to an application's lookup request. The Extensions Manager can be used to enable and disable individual NSL plug-ins. When the NSL Manager is initialized, each NSL plug-in provides the following information to the NSL Manager:
The NSL Manager will be available on all PowerPC-based computers that run the Mac OS release code-named Allegro or later. The first release will be accompanied by two NSL plug-ins: DNS and SLP. Additional NSL plug-ins may also become available from Apple Computer or third-party developers.
Figure 1 illustrates the relationship between applications, the NSL Manager, and NSL plug-ins.
Figure 1. The relationship between the NSL Manager, NSL plug-ins, and Applications.
To search for network services, an application opens a session with the NSL Manager using NSLOpenNavigationAPI:
status = NSLOpenNavigationAPI( &gOurClientRef );
Then it must prepare three data values that are used as parameters to the NSLStartServicesLookup function:
To create a request parameter block, your application first makes a service list that specifies the services to be searched for using NSLMakeNewServicesList and then pass the service list and any attributes to NSLMakeRequestPB. For example, to search for HTTP and FTP services, you would do something like this:
serviceList = NSLMakeNewServicesList( "http,ftp" ); iErr.theErr = NSLMakeRequestPB( serviceList, "",&newDataPtr);
In the call to NSLMakeRequestPB, your application can use the attribute parameter to specify a string that is to be used to narrow the scope of the search. For example, if the attribute parameter is "Web Sharing," the search results will include only those Personal Web Sharing HTTP services that have registered with "Web Sharing" as an attribute.
To create a synchronous lookup request, your application calls NSLPrepareRequest like this:
iErr = NSLPrepareRequest( NULL, NULL, gOurClientRef, &ourRequestRef, buffer, bufLen, &ourAsyncInfo );
To create an asynchronous lookup request, your application calls NSLPrepareRequest like this:
iErr = NSLPrepareRequest( notifierPtr, NULL, gOurClientRef, &ourRequestRef,buffer, bufLen, &ourAsyncInfo );
When you call NSLPrepareRequest, you can specify NULL as the value for the notifier parameter (the first parameter in the first call above), if you want to wait for search results to be returned (synchronous mode). If instead, you want the NSL Manager to call your notification routine when search results are ready to be returned (asynchronous mode), specify a pointer to your notification routine. In the second call above notifierPtr is a procedure pointer to the client's asynchronous notifier.
The other parameters to the NSLPrepareRequest function are:
To define the virtual "geographic" boundary of the search, your application calls NSLMakeNewNeighborhood. You can explicitly specify which a neighborhood, for example apple.com. In the following example, the application creates a neighborhood whose boundary is apple.com.
neighborhood = NSLMakeNewNeighborhood("apple.com", NULL );
Or, you can use the default neighborhood:
neighborhood = NSLMakeNewNeighborhood( "", NULL );
Once your application has created the request parameter block, the lookup request, and the neighborhood, it calls NSLStartServicesLookup to start the search:
iErr = NSLStartServicesLookup( ourRequestRef, neighborhood, newDataPtr, ourAsyncInfo );
The parameters to the NSLStartServices function are:
If the NSLStartServicesLookup was called synchronously, NSLStartServicesLookup returns after having placed the first lookup results in the results buffer field of asyncInfo. If NSLStartServicesLookup was called asynchronously, the NSL Manager places the first lookup results in the results buffer and calls your application's notification routine. Your application copies the results and calls NSLContinueLookup, which continues the lookup and returns more lookup results in the results buffer. Your application continues to call NSLContinueLookup until all of the results have been returned.
This article has provided a brief overview of NSL. For more detailed information on the NSL technology, API and sample User Interface recommendations, please refer to the Network Services Location Manager Developer's Kit Documentation located in the July issue of the Mac OS SDK CD distributed by Apple Computer, Inc.
The authors of this article are members of the Network Services Location Project Team at Apple Computer, Inc.




