Main Page | Modules | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Examples

service.c

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2005, Swedish Institute of Computer Science
00003  * All rights reserved. 
00004  *
00005  * Redistribution and use in source and binary forms, with or without 
00006  * modification, are permitted provided that the following conditions 
00007  * are met: 
00008  * 1. Redistributions of source code must retain the above copyright 
00009  *    notice, this list of conditions and the following disclaimer. 
00010  * 2. Redistributions in binary form must reproduce the above copyright 
00011  *    notice, this list of conditions and the following disclaimer in the 
00012  *    documentation and/or other materials provided with the distribution. 
00013  * 3. Neither the name of the Institute nor the names of its contributors 
00014  *    may be used to endorse or promote products derived from this software 
00015  *    without specific prior written permission. 
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 
00018  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
00020  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 
00021  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
00022  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
00023  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
00024  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
00025  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
00026  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
00027  * SUCH DAMAGE. 
00028  *
00029  * This file is part of the Contiki operating system.
00030  *
00031  * @(#)$Id: service.c,v 1.1 2006/06/17 22:41:20 adamdunkels Exp $
00032  */
00033 
00034 #include <string.h>
00035 
00036 #include "contiki.h"
00037 
00038 /**
00039  * \addtogroup service
00040  * @{
00041  */
00042 
00043 /**
00044  * \file
00045  *         Implementation of the Contiki service mechanism.
00046  * \author
00047  *         Adam Dunkels <adam@sics.se>
00048  */
00049 
00050 static struct service *services_list = NULL;
00051 
00052 /*---------------------------------------------------------------------------*/
00053 void
00054 service_register(struct service *s)
00055 {
00056   struct service *existing;
00057 
00058   
00059   s->p = PROCESS_CURRENT();
00060 
00061   existing = service_find(s->name);
00062   if(existing != NULL) {
00063     service_remove(existing);
00064   }
00065 
00066   s->next = services_list;
00067   services_list = s;
00068 }
00069 /*---------------------------------------------------------------------------*/
00070 void
00071 service_remove(struct service *s)
00072 {
00073   struct service *t;
00074 
00075 
00076   /* Check if service is first on the list. */
00077   if(s == services_list) {
00078     services_list = s->next;
00079     
00080     /* Post a notification to the owner process. */
00081     process_post(s->p, PROCESS_EVENT_SERVICE_REMOVED, s);
00082     
00083   } else {
00084     for(t = services_list; t != NULL && t->next != s; t = t->next);
00085     if(t != NULL) {
00086       t->next = s->next;
00087       
00088       /* Post a notification to the owner process. */
00089       process_post(s->p, PROCESS_EVENT_SERVICE_REMOVED, s);
00090     }
00091   }
00092 
00093   s->next = NULL;
00094 }
00095 /*---------------------------------------------------------------------------*/
00096 struct service *
00097 service_find(const char *name)
00098 {
00099   struct service *s;  
00100 
00101   
00102   for(s = services_list; s != NULL; s = s->next) {
00103     if(strcmp(s->name, name) == 0) {
00104       return s;
00105     }    
00106   }
00107   return NULL;
00108 }
00109 /*---------------------------------------------------------------------------*/
00110 
00111 /** @} */

Generated on Thu Jun 22 17:45:43 2006 for Contiki 2.x by  doxygen 1.4.4