TSP: The Transport Sample Protocol



Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

bb_utils.c

Go to the documentation of this file.
00001 
00037 #include <string.h>
00038 #include <unistd.h>
00039 #include <sys/types.h>
00040 #include <stdlib.h>
00041 #include <stdarg.h>
00042 #include <stdio.h>
00043 
00044 #include <sys/ipc.h>
00045 
00046 #include <bb_utils.h>
00047 #include <bb_sha1.h>
00048 #include "tsp_simple_trace.h"
00049 
00050 char* 
00051 bb_utils_build_shm_name(const char* shm_name) {
00052   
00053   char* retval;
00054   int i_size_name;
00055   const char * prefix = "/";
00056     
00057   i_size_name = strlen(shm_name)+strlen(prefix)+1;
00058   retval = NULL;
00059   retval = (char *) malloc(i_size_name*sizeof(char));
00060   if (retval!=NULL) {
00061     strncpy(retval,prefix,strlen(prefix));
00062     strncpy(retval+strlen(prefix),shm_name,strlen(shm_name));
00063     retval[i_size_name-1] = '\0';
00064   }
00065   
00066   return retval;
00067 } /* end of bb_utils_build_shm_name */
00068 
00069 char*
00070 bb_utils_build_sem_name(const char* sem_name) {
00071   
00072   char* retval;
00073   int i_size_name;
00074   const char * prefix = "/";
00075   const char * postfix = "_sem";
00076     
00077   i_size_name = strlen(sem_name)+strlen(prefix)+strlen(postfix)+1;
00078   retval = NULL;
00079   retval = (char *) malloc(i_size_name*sizeof(char));
00080   if (retval!=NULL) {
00081     strncpy(retval,prefix,strlen(prefix));
00082     strncpy(retval+strlen(prefix),sem_name,strlen(sem_name));
00083     strncpy(retval+strlen(prefix)+strlen(sem_name),postfix,strlen(postfix));    
00084     retval[i_size_name-1] = '\0';
00085   }
00086   
00087   return retval;
00088 } /* end of bb_utils_build_sem_name */
00089 
00090 char*
00091 bb_utils_build_msg_name(const char* msg_name) {
00092   
00093   char* retval;
00094   int i_size_name;
00095   const char * prefix = "/";
00096   const char * postfix = "_msg";
00097     
00098   i_size_name = strlen(msg_name)+strlen(prefix)+strlen(postfix)+1;
00099   retval = NULL;
00100   retval = (char *) malloc(i_size_name*sizeof(char));
00101   if (retval!=NULL) {
00102     strncpy(retval,prefix,strlen(prefix));
00103     strncpy(retval+strlen(prefix),msg_name,strlen(msg_name));
00104     strncpy(retval+strlen(prefix)+strlen(msg_name),postfix,strlen(postfix));    
00105     retval[i_size_name-1] = '\0';
00106   }
00107   
00108   return retval;
00109 } /* end of bb_utils_build_msg_name */
00110 
00111 key_t
00112 bb_utils_ntok_user(const char* name, int32_t user_specific) {
00113   key_t s_key;
00114   int32_t retcode;
00115   
00116   SHA1Context sha;
00117   uint8_t Message_Digest[20];
00118 
00119   /* We use the first byte of a SHA1 hash of the BBname
00120    * unless the algorithm fail.
00121    * If SHA1 fail we go back to poor key generation method
00122    * using the name length.
00123    * In both case we must Xored the key with user_specific in order
00124    * to isolate different user from using the same key
00125    */
00126   retcode  = SHA1Reset(&sha);
00127   retcode &= SHA1Input(&sha, (const unsigned char *) name,strlen(name));
00128   retcode &= SHA1Result(&sha, Message_Digest);
00129 
00130   /* SHA 1 NOK back to old poor method */
00131   if (0 != retcode) {
00132     s_key = ((strlen(name) << 16) & 0xFFFF0000) ^ (user_specific & 0x0000FFFF);
00133   } else {
00134     s_key = (Message_Digest[0]        |
00135              (Message_Digest[1] << 8) |
00136              (Message_Digest[2] << 16)|
00137              (Message_Digest[3] << 24)) ^
00138       user_specific;               
00139   }
00140   return s_key;
00141 } /* end of bb_utils_ntok_user */
00142 
00143 key_t
00144 bb_utils_ntok(const char* name) {
00145 
00146   return bb_utils_ntok_user(name,getuid());
00147 
00148 } /* end of bb_utils_ntok */
00149 
00150 int32_t 
00151 bb_logMsg(const BB_LOG_LEVEL_T level, const char* who, char* fmt, ...) {
00152   va_list args;
00153   char    message[2048];
00154 
00155   memset(message,0,2048);
00156   va_start(args, fmt);
00157   vsnprintf(message, 2048, fmt, args);
00158   va_end(args);
00159   
00160   switch (level) {
00161     
00162   case BB_LOG_ABORT:
00163   case BB_LOG_SEVERE:
00164     STRACE_ERROR(("%s : %s",who,message));
00165     break;
00166   case BB_LOG_WARNING:
00167     STRACE_WARNING(("%s : %s",who,message));
00168     break;
00169   case BB_LOG_INFO:
00170   case BB_LOG_CONFIG:
00171     STRACE_INFO(("%s : %s",who,message));
00172     break;
00173   case BB_LOG_FINE:
00174   case BB_LOG_FINER:
00175     STRACE_DEBUG(("%s : %s",who,message));
00176 
00177   }
00178   return 0;
00179 }
00180 
00181 
Framework Home Page.

Beware !! TSP wave is coming...