#include <netinet/in.h>#include <netdb.h>#include <pthread.h>Go to the source code of this file.
Defines | |
| #define | inet_ntoa __dont__use__inet_ntoa__use__ast_inet_ntoa__instead__ |
| #define | PTHREAD_ATTR_STACKSIZE 2097152 |
Functions | |
| hostent * | ast_gethostbyname (const char *host, struct ast_hostent *hp) |
| int | ast_base64encode (char *dst, unsigned char *src, int srclen, int max) |
| int | ast_base64decode (unsigned char *dst, char *src, int max) |
| int | test_for_thread_safety (void) |
| const char * | ast_inet_ntoa (char *buf, int bufsiz, struct in_addr ia) |
| int | ast_utils_init (void) |
| int | ast_pthread_create (pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *data) |
| char * | ast_strcasestr (const char *, const char *) |
|
|
|
|
|
Definition at line 48 of file utils.h. Referenced by ast_pthread_create(). |
|
||||||||||||||||
|
Definition at line 227 of file utils.c. 00228 {
00229 int cnt = 0;
00230 unsigned int byte = 0;
00231 unsigned int bits = 0;
00232 int incnt = 0;
00233 #if 0
00234 unsigned char *odst = dst;
00235 #endif
00236 while(*src && (cnt < max)) {
00237 /* Shift in 6 bits of input */
00238 byte <<= 6;
00239 byte |= (b2a[(int)(*src)]) & 0x3f;
00240 bits += 6;
00241 #if 0
00242 printf("Add: %c %s\n", *src, binary(b2a[(int)(*src)] & 0x3f, 6));
00243 #endif
00244 src++;
00245 incnt++;
00246 /* If we have at least 8 bits left over, take that character
00247 off the top */
00248 if (bits >= 8) {
00249 bits -= 8;
00250 *dst = (byte >> bits) & 0xff;
00251 #if 0
00252 printf("Remove: %02x %s\n", *dst, binary(*dst, 8));
00253 #endif
00254 dst++;
00255 cnt++;
00256 }
00257 }
00258 #if 0
00259 dump(odst, cnt);
00260 #endif
00261 /* Dont worry about left over bits, they're extra anyway */
00262 return cnt;
00263 }
|
|
||||||||||||||||||||
|
Definition at line 265 of file utils.c. 00266 {
00267 int cnt = 0;
00268 unsigned int byte = 0;
00269 int bits = 0;
00270 int index;
00271 int cntin = 0;
00272 #if 0
00273 char *odst = dst;
00274 dump(src, srclen);
00275 #endif
00276 /* Reserve one bit for end */
00277 max--;
00278 while((cntin < srclen) && (cnt < max)) {
00279 byte <<= 8;
00280 #if 0
00281 printf("Add: %02x %s\n", *src, binary(*src, 8));
00282 #endif
00283 byte |= *(src++);
00284 bits += 8;
00285 cntin++;
00286 while((bits >= 6) && (cnt < max)) {
00287 bits -= 6;
00288 /* We want only the top */
00289 index = (byte >> bits) & 0x3f;
00290 *dst = base64[index];
00291 #if 0
00292 printf("Remove: %c %s\n", *dst, binary(index, 6));
00293 #endif
00294 dst++;
00295 cnt++;
00296 }
00297 }
00298 if (bits && (cnt < max)) {
00299 /* Add one last character for the remaining bits,
00300 padding the rest with 0 */
00301 byte <<= (6 - bits);
00302 index = (byte) & 0x3f;
00303 *(dst++) = base64[index];
00304 cnt++;
00305 }
00306 *dst = '\0';
00307 return cnt;
00308 }
|
|
||||||||||||
|
Definition at line 140 of file utils.c. References ast_hostent::buf, ast_hostent::hp, and s. Referenced by ast_find_ourip(), and ast_get_ip(). 00141 {
00142 int res;
00143 int herrno;
00144 const char *s;
00145 struct hostent *result = NULL;
00146 /* Although it is perfectly legitimate to lookup a pure integer, for
00147 the sake of the sanity of people who like to name their peers as
00148 integers, we break with tradition and refuse to look up a
00149 pure integer */
00150 s = host;
00151 while(s && *s) {
00152 if (!isdigit(*s))
00153 break;
00154 s++;
00155 }
00156 if (!s || !*s)
00157 return NULL;
00158 res = gethostbyname_r(host, &hp->hp, hp->buf, sizeof(hp->buf), &result, &herrno);
00159
00160 if (res || !result || !hp->hp.h_addr_list || !hp->hp.h_addr_list[0])
00161 return NULL;
00162 return &hp->hp;
00163 }
|
|
||||||||||||||||
|
Definition at line 343 of file utils.c. Referenced by ast_apply_ha(), ast_ouraddrfor(), ast_rtcp_read(), ast_rtp_bridge(), ast_rtp_read(), and ast_rtp_senddigit(). 00344 {
00345 return inet_ntop(AF_INET, &ia, buf, bufsiz);
00346 }
|
|
||||||||||||||||||||
|
Definition at line 357 of file utils.c. References ast_log(), LOG_WARNING, PTHREAD_ATTR_STACKSIZE, and pthread_create. Referenced by ast_autoservice_start(), ast_pbx_outgoing_app(), ast_pbx_outgoing_exten(), ast_pbx_start(), init_manager(), and test_for_thread_safety(). 00358 {
00359 pthread_attr_t lattr;
00360 if (!attr) {
00361 pthread_attr_init(&lattr);
00362 attr = &lattr;
00363 }
00364 errno = pthread_attr_setstacksize(attr, PTHREAD_ATTR_STACKSIZE);
00365 if (errno)
00366 ast_log(LOG_WARNING, "pthread_attr_setstacksize returned non-zero: %s\n", strerror(errno));
00367 return pthread_create(thread, attr, start_routine, data); /* We're in ast_pthread_create, so it's okay */
00368 }
|
|
||||||||||||
|
Definition at line 386 of file utils.c. References ast_log(), and LOG_ERROR. 00387 {
00388 char *u1, *u2;
00389 int u1len = strlen(haystack) + 1, u2len = strlen(needle) + 1;
00390
00391 u1 = alloca(u1len);
00392 u2 = alloca(u2len);
00393 if (u1 && u2) {
00394 char *offset;
00395 if (u2len > u1len) {
00396 /* Needle bigger than haystack */
00397 return NULL;
00398 }
00399 offset = strstr(upper(haystack, u1, u1len), upper(needle, u2, u2len));
00400 if (offset) {
00401 /* Return the offset into the original string */
00402 return ((char *)((unsigned int)haystack + (unsigned int)(offset - u1)));
00403 } else {
00404 return NULL;
00405 }
00406 } else {
00407 ast_log(LOG_ERROR, "Out of memory\n");
00408 return NULL;
00409 }
00410 }
|
|
|
Definition at line 348 of file utils.c. Referenced by main(). 00349 {
00350 base64_init();
00351 return 0;
00352 }
|
|
|
Definition at line 199 of file utils.c. References ast_mutex_lock, ast_mutex_unlock, and ast_pthread_create(). Referenced by main(). 00200 {
00201 ast_mutex_lock(&test_lock2);
00202 ast_mutex_lock(&test_lock);
00203 lock_count += 1;
00204 ast_mutex_lock(&test_lock);
00205 lock_count += 1;
00206 ast_pthread_create(&test_thread, NULL, test_thread_body, NULL);
00207 usleep(100);
00208 if (lock_count != 2)
00209 test_errors++;
00210 ast_mutex_unlock(&test_lock);
00211 lock_count -= 1;
00212 usleep(100);
00213 if (lock_count != 1)
00214 test_errors++;
00215 ast_mutex_unlock(&test_lock);
00216 lock_count -= 1;
00217 if (lock_count != 0)
00218 test_errors++;
00219 ast_mutex_unlock(&test_lock2);
00220 usleep(100);
00221 if (lock_count != 0)
00222 test_errors++;
00223 pthread_join(test_thread, NULL);
00224 return(test_errors); /* return 0 on success. */
00225 }
|
1.4.2