Esempio n. 1
0
int himd_add_fragment_info(struct himd * himd, struct fraginfo * f, struct himderrinfo * status)
{
    int idx_freefrag;
    unsigned char * linkbuffer;
    unsigned char * fragbuffer;
    status = status;

    g_return_val_if_fail(himd != NULL, -1);
    g_return_val_if_fail(f != NULL, -1);

    linkbuffer    = get_frag(himd, 0);

    idx_freefrag  = beword16(linkbuffer+14) & 0xFFF;
    fragbuffer    = get_frag(himd, idx_freefrag);

    setbeword16(linkbuffer+14, beword16(fragbuffer+14) & 0xFFF);
    f->nextfrag = 0;

    /* copy fragment struct to slot buffer */
    setfrag(f, fragbuffer);

    return idx_freefrag;
}
Esempio n. 2
0
int himd_get_fragment_info(struct himd * himd, unsigned int idx, struct fraginfo * f, struct himderrinfo * status)
{
    unsigned char * fragbuffer;

    g_return_val_if_fail(himd != NULL, -1);
    g_return_val_if_fail(idx >= HIMD_FIRST_FRAGMENT, -1);
    g_return_val_if_fail(idx <= HIMD_LAST_FRAGMENT, -1);
    g_return_val_if_fail(f != NULL, -1);

    fragbuffer = get_frag(himd, idx);
    memcpy(f->key, fragbuffer, 8);
    f->firstblock = beword16(fragbuffer + 8);
    f->lastblock = beword16(fragbuffer + 10);
    f->firstframe = fragbuffer[12];
    f->lastframe = fragbuffer[13];
    f->fragtype = fragbuffer[14] >> 4;
    f->nextfrag = beword16(fragbuffer+14) & 0xFFF;
    (void)status;
    return 0;
}
Esempio n. 3
0
/* TRANSFER */
int transfer(int sock,struct sockaddr_in *server,int file_id,FILE *foutfd,int size){
   struct fgetfrag *req;
   struct ffrag     ans;
   int last_asked=0;
   int offset=0;


   printf("\nvale: %i\n",sizeof(*req));
   printf("vale: %i\n",sizeof(req->type));
   printf("vale: %i\n",sizeof(req->file_id));
   printf("vale: %i\n",sizeof(req->offset));
   printf("vale: %i\n",sizeof(req->md5));


   while (offset<size){
      req=get_frag(file_id,offset);
      last_asked=offset;
      send_buf(sock,server,req,sizeof(*req));
      print_fgetfrag(*req);
      if(receive(sock,(void *)&ans,sizeof(ans))==0){
         if(check_ffrag(ans)){
            printf("Corrupt packet\n");
            exit(1);
         }
         else{
            if (ans.offset==last_asked){
               // Answer correct
               fseek(foutfd,SEEK_SET,ans.offset);
               if(fwrite(ans.fragment,sizeof(char),ans.size,foutfd)!=ans.size){
                  // Fail writing to outfile
                  printf("Error writing to file");
                  exit(1);
               }
               offset=ans.offset+ans.size;
            }
         }
      }
   }
   return 0;
}