/* 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;
}
Beispiel #2
0
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;  
}  
Beispiel #3
0
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;
}