Subversion Repositories HelenOS

Rev

Rev 3666 | Rev 4307 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright (c) 2008 Lukas Mejdrech
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  * - Redistributions of source code must retain the above copyright
  10.  *   notice, this list of conditions and the following disclaimer.
  11.  * - Redistributions in binary form must reproduce the above copyright
  12.  *   notice, this list of conditions and the following disclaimer in the
  13.  *   documentation and/or other materials provided with the distribution.
  14.  * - The name of the author may not be used to endorse or promote products
  15.  *   derived from this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. /** @addtogroup net
  30.  * @{
  31.  */
  32.  
  33. /** @file
  34.  */
  35.  
  36. #include <async.h>
  37. #include <stdio.h>
  38. #include <task.h>
  39.  
  40. #include <ipc/ipc.h>
  41.  
  42. #include "err.h"
  43.  
  44. extern int  module_message( ipc_callid_t callid, ipc_call_t * call, ipc_call_t * answer, int * answer_count );
  45. extern void module_print_name( void );
  46. extern int  module_start( async_client_conn_t client_connection );
  47.  
  48. void    client_connection( ipc_callid_t iid, ipc_call_t * icall );
  49. int main( int argc, char * argv[] );
  50.  
  51. /** Default thread for new connections.
  52.  */
  53. void client_connection( ipc_callid_t iid, ipc_call_t * icall ){
  54.     ipc_callid_t    callid;
  55.     ipc_call_t  call;
  56.     ipc_call_t  answer;
  57.     int     count;
  58.     int     res;
  59.  
  60.     /*
  61.      * Accept the connection
  62.      *  - Answer the first IPC_M_CONNECT_ME_TO call.
  63.      */
  64.     ipc_answer_0( iid, EOK );
  65.  
  66.     while( true ){
  67.         // refresh data
  68.         count = 0;
  69.         IPC_SET_RETVAL( answer, 0 );
  70.         // just to be precize
  71.         IPC_SET_RETVAL( answer, 0 );
  72.         IPC_SET_ARG1( answer, 0 );
  73.         IPC_SET_ARG2( answer, 0 );
  74.         IPC_SET_ARG3( answer, 0 );
  75.         IPC_SET_ARG4( answer, 0 );
  76.         IPC_SET_ARG5( answer, 0 );
  77.  
  78.         callid = async_get_call( & call );
  79.         res = module_message( callid, & call, & answer, & count );
  80.  
  81.         switch( count ){
  82.             case 0:     ipc_answer_0( callid, res );
  83.                     continue;
  84.             case 1:     ipc_answer_1( callid, res, IPC_GET_ARG1( answer ));
  85.                     continue;
  86.             case 2:     ipc_answer_2( callid, res, IPC_GET_ARG1( answer ), IPC_GET_ARG2( answer ));
  87.                     continue;
  88.             case 3:     ipc_answer_3( callid, res, IPC_GET_ARG1( answer ), IPC_GET_ARG2( answer ), IPC_GET_ARG3( answer ));
  89.                     continue;
  90.             case 4:     ipc_answer_4( callid, res, IPC_GET_ARG1( answer ), IPC_GET_ARG2( answer ), IPC_GET_ARG3( answer ), IPC_GET_ARG4( answer ));
  91.                     continue;
  92.             default:    ipc_answer_5( callid, res, IPC_GET_ARG1( answer ), IPC_GET_ARG2( answer ), IPC_GET_ARG3( answer ), IPC_GET_ARG4( answer ), IPC_GET_ARG5( answer ));
  93.                     continue;
  94.         }
  95.     }
  96. }
  97.  
  98. /** Starts the module.
  99.  *  Parameters are ignored.
  100.  */
  101. int main( int argc, char * argv[] ){
  102.     ERROR_DECLARE;
  103.  
  104.     printf("\nTask %d - ", task_get_id());
  105.     module_print_name();
  106.     if( ERROR_OCCURED( module_start( client_connection ))){
  107.         printf( " - ERROR %i", ERROR_CODE );
  108.         return ERROR_CODE;
  109.     }
  110.     return EOK;
  111. }
  112.  
  113. /** @}
  114.  */
  115.