Home | History | Annotate | Download | only in conn_init
      1 /*
      2  * Copyright 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include <stdio.h>
     18 #include <stdlib.h>
     19 #include <string.h>
     20 #include <time.h>
     21 
     22 #include "wfc_util_log.h"
     23 
     24 #define WFC_UTIL_RANDOM_MAC_HEADER "001122"
     25 
     26 void wfc_util_htoa(unsigned char *pHexaBuff, int szHexaBuff, char *pAsciiStringBuff, int szAsciiStringBuff)
     27 {
     28 	int i, j;
     29 	char hex_table[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
     30 	                                 'A', 'B', 'C', 'D', 'E', 'F'};
     31 
     32 	if ((szHexaBuff*2) > szAsciiStringBuff) {
     33 		wfc_util_log_error("wfc_util_htoa : not enough buffer size(%d)", szAsciiStringBuff);
     34 		return;
     35 	}
     36 
     37 	memset(pAsciiStringBuff, 0, szAsciiStringBuff);
     38 
     39 	/* for (i = szHexaBuff-1, j = 0; i >= 0; i--, j += 2) { */
     40 	for (i = 0, j = 0; i < szHexaBuff; i++, j += 2) {
     41 		/*pAsciiStringBuff[j]     = hex_table[(pHexaBuff[i] >> 4) & 0x0F];
     42 		*/
     43 		pAsciiStringBuff[j]     = hex_table[pHexaBuff[i] >> 4];
     44 		pAsciiStringBuff[j + 1] = hex_table[pHexaBuff[i] & 0x0F];
     45 	}
     46 
     47 	return;
     48 }
     49 
     50 void wfc_util_atoh(char *pAsciiString, int szAsciiString, unsigned char *pHexaBuff, int szHexaBuff)
     51 {
     52 	int i, pos;
     53 	char temp;
     54 
     55 	if ( 0!=(szAsciiString%2) || (szHexaBuff*2) < szAsciiString) {
     56 		wfc_util_log_error("wfc_util_atoh : not enough buffer size(%d)", szHexaBuff);
     57 		return;
     58 	}
     59 
     60 	memset(pHexaBuff, 0, szHexaBuff);
     61 
     62 	for (i=0 ; i<szAsciiString ; i++) {
     63 
     64 		/* pos = (szAsciiString - i - 1) / 2; */
     65 		pos = i / 2;
     66 		temp = pAsciiString[i];
     67 
     68 		if (temp >= '0' && temp <= '9') {
     69 			temp = temp - '0';
     70 		} else if ( temp >= 'a' && temp <= 'f' ) {
     71 			temp = temp - 'a' + 10;
     72 		} else if ( temp >= 'A' && temp <= 'F' ) {
     73 			temp = temp - 'A' + 10;
     74 		} else {
     75 			temp = 0;
     76 		}
     77 
     78 		if (0==i%2) {
     79 			pHexaBuff[pos] = temp<<4;
     80 		} else {
     81 			pHexaBuff[pos] |= temp;
     82 		}
     83 	}
     84 
     85 	return;
     86 }
     87 
     88 /*
     89  * wfc_util_is_random_mac
     90  *
     91  * return : it will return 1 if [mac_add] is same with WFC_UTIL_RANDOM_MAC_HEADER
     92  *          or will return 0 if not.
     93  */
     94 int wfc_util_is_random_mac(char *mac_add)
     95 {
     96 	if(0 == strncmp(mac_add, WFC_UTIL_RANDOM_MAC_HEADER, 6)) {
     97 		return 1;
     98 	}
     99 
    100 	return 0;
    101 }
    102 
    103 /*
    104  * wfc_util_random_mac
    105  *
    106  * Create random MAC address
    107  *
    108  * return : void
    109  */
    110 void wfc_util_random_mac(unsigned char* mac_addr)
    111 {
    112 	unsigned long int rand_mac;
    113 
    114 	if(NULL == mac_addr) {
    115 		wfc_util_log_error("wfc_util_random_mac : buffer is NULL");
    116 		return;
    117 	}
    118 
    119 	/* Create random MAC address: offset 3, 4 and 5 */
    120 	srandom(time(NULL));
    121 	rand_mac=random();
    122 
    123 	#ifndef WFC_UTIL_RANDOM_MAC_HEADER
    124 	mac_addr[0] = (unsigned char)0x00;
    125 	mac_addr[1] = (unsigned char)0x11;
    126 	mac_addr[2] = (unsigned char)0x22;
    127 	#else  /* WFC_UTIL_RANDOM_MAC_HEADER */
    128 	wfc_util_atoh(WFC_UTIL_RANDOM_MAC_HEADER, 6, mac_addr, 3);
    129 	#endif /* WFC_UTIL_RANDOM_MAC_HEADER */
    130 	mac_addr[3] = (unsigned char)rand_mac;
    131 	mac_addr[4] = (unsigned char)(rand_mac >> 8);
    132 	mac_addr[5] = (unsigned char)(rand_mac >> 16);
    133 
    134 	return;
    135 }
    136