/* returns pointer to the first new line char position */ const char* recv_line (SYS_socket s, char ** pbuf, size_t buf_left) { while (buf_left > 0) { ssize_t rcved_size; char *buf_start = *pbuf; const char *nl_ptr; rcved_size = recv (s, buf_start, buf_left, 0); if (0 > rcved_size) { int err = SYS_sock_errno; fprintf (stderr, "Network error: %u\n", (unsigned)err); SYS_set_sock_errno (err); return NULL; } *pbuf += rcved_size; buf_left -= rcved_size; nl_ptr = find_chr (buf_start, '\n', rcved_size); if (nl_ptr) return nl_ptr; } fprintf (stderr, "No buffer space left.\n"); return NULL; }
void mapper( char *ref, int length, int start_base_pos, const char *bam ) { anal_t input; gzFile pRef; kseq_t * seq = NULL; char chr[8] = { 0, }; int ret; bam_plbuf_t *buf; bam1_t *b; /* fprintf( stderr, "ref: %s\n", ref ); fprintf( stderr, "length: %d\n", length ); fprintf( stderr, "start_base_pos: %d\n", start_base_pos ); fprintf( stderr, "bam: %s\n", bam ); */ input.beg = 0; input.end = 0x7fffffff; input.in = samopen(bam, "rb", 0); if (input.in == 0) { fprintf(stderr, "Fail to open BAM file %s\n", bam); return; } pRef = gzopen( ref, "r" ); fprintf( stderr, "ref : %s\n", ref ); fprintf( stderr, "pRef: %p\n", pRef ); if( pRef == NULL ) { fprintf( stderr, "ref : %s\n", ref ); fprintf( stderr, "pRef: %p\n", pRef ); return; } seq = kseq_init( pRef ); b = bam_init1(); // alloc memory size of bam1_t //fprintf( stderr, "%\pn", b ); buf = bam_plbuf_init(pileup_func, &input); // alloc memory bam_plbuf_set_mask(buf, -1); while ((ret = samread( input.in, b)) >= 0) { bam_plbuf_push(b, buf); //fprintf( stderr, "%x\n", b->core.flag ); if( b->core.flag & 0x0004 ) // unmapped { // do nothing /* qname1 = strtok(bam1_qname(b), ":\t\n "); qname2 = strtok(NULL, ":\t\n "); qname3 = atoi(qname2); fprintf( stderr, "%s:%10d:%s:%d\t%c:%d:%d:%d\n", qname1, qname3, "*", b->core.pos, '*', b->core.flag, b->core.qual, ret ); */ fprintf( stdout, "%s:%s:%d\t%c:0x%x:%d:%d\n", bam1_qname(b), "*", b->core.pos+1, '*', b->core.flag, b->core.qual, ret ); /* fprintf( stderr, "%s:%s:%d\t%c:0x%x:%d:%d\n", bam1_qname(b), "*", b->core.pos, '*', b->core.flag, b->core.qual, ret ); */ } else { // to find a base in the reference genome, seq. if( ( seq != NULL ) && ( strcmp( input.in->header->target_name[b->core.tid], chr ) == 0 ) ) { // already found that // fprintf( stderr, "found : %s\n", chr ); }else { if( find_chr(input.in->header->target_name[b->core.tid], seq, chr) < 0 ) { fprintf( stderr, "ERROR : cannot find chromosome %s\n", \ input.in->header->target_name[b->core.tid] ); }else { fprintf( stderr, "FOUND CHR : %s\n", chr ); } } // remove not aligned to the chromosome fprintf( stdout, "%s:%s:%d\t%c:%d:%d:%d\n", bam1_qname(b), input.in->header->target_name[b->core.tid], b->core.pos+1, seq->seq.s[b->core.pos], b->core.flag, b->core.qual, ret ); /* fprintf( stderr, "%s:%s:%d\t%c:%d:%d:%d\n", bam1_qname(b), input.in->header->target_name[b->core.tid], b->core.pos, seq->seq.s[b->core.pos], b->core.flag, b->core.qual, ret ); */ } } // for the last bases... // printf("pos:%d(%c), flag:%d qual: %d(ret %d)\n", // b->core.pos+1, seq->seq.s[b->core.pos], b->core.flag, b->core.qual, ret ); bam_plbuf_push(0, buf); bam_plbuf_destroy(buf); // release memory bam_destroy1(b); // release memory size of bam1_t samclose(input.in); kseq_destroy( seq ); gzclose( pRef ); return; }
static int SdpMedia(const char *data, int len, sdp_msg *msg) { const char *next_token; const char *lineend; char number[256]; int tokenlen, token; short mcnt; mcnt = msg->transp.count; if (mcnt == SDP_MAX_RTP_CHANNELS) return -1; lineend = data + len; /* The first token media type */ tokenlen = get_token_len(data, lineend, &next_token); if (tokenlen == 0 || data[tokenlen] != ' ') { return -1; } msg->transp.type[mcnt] = SDP_MEDIA_UNKNOW; if (strncmp(data, "audio", tokenlen) == 0) { msg->transp.type[mcnt] = SDP_MEDIA_AUDIO; } else if (strncmp(data, "video", tokenlen) == 0) { msg->transp.type[mcnt] = SDP_MEDIA_VIDEO; } else { LogPrintf(LV_WARNING, "New media type"); } data = next_token; /* port */ tokenlen = get_token_len(data, lineend, &next_token); if (tokenlen == 0 || data[tokenlen] != ' ') { return -1; } token = find_chr(data, tokenlen, '/'); if (token != -1) { memcpy(number, data, token); number[token] = '\0'; msg->transp.port[mcnt] = atoi(number); LogPrintf(LV_WARNING, "Port count to be complete"); } else { msg->transp.port[mcnt] = atoi(data); } data = next_token; /* media protocol */ tokenlen = get_token_len(data, lineend, &next_token); if (tokenlen == 0 || data[tokenlen] != ' ') { return -1; } msg->transp.proto[mcnt] = DMemMalloc(tokenlen+1); memcpy(msg->transp.proto[mcnt], data, tokenlen); msg->transp.proto[mcnt][tokenlen] = '\0'; data = next_token; /* pt */ tokenlen = get_token_len(data, lineend, &next_token); if (strcmp(msg->transp.proto[mcnt], "RTP/AVP") == 0) { while (tokenlen != 0) { #if 0 memcpy(number, data, tokenlen); number[tokenlen] = '\0'; msg->transp.media[mcnt].pt[msg->transp.media[mcnt].pt_count] = atoi(number); #else msg->transp.media[mcnt].pt[msg->transp.media[mcnt].pt_count] = atoi(data); #endif msg->transp.media[mcnt].pt_count++; data = next_token; tokenlen = get_token_len(data, lineend, &next_token); } } msg->transp.count++; return 0; }