예제 #1
0
// Make this a proper scanner that feeds into bison
be_node_t *
be_decode(const char *str, uint64_t size){
  be_node_t *node = NULL;
  if(node == NULL) return node;
  bencode_parse(&node, str, size);
  return node;
}
예제 #2
0
파일: btih.c 프로젝트: ivartj/btutils
int main(int argc, char *argv[])
{
	char *benstring;
	unsigned char *hash;
	char *infostr;
	bencode_val *benval;
	bencode_val *info;
	size_t benstringlen;
	size_t infostrlen;
	size_t hashlen;
	int i;

	parseargs(argc, argv);
	openfile();

	benstring = freadall(in, &benstringlen);

	benval = bencode_parse(benstring, benstringlen);
	if(benval == NULL) {
		fprintf(stderr, "Failed to parse bencoding.\n");
		exit(EXIT_FAILURE);
	}

	info = bencode_dict_get((bencode_dict *)benval, "info");
	if(info == NULL) {
		fprintf(stderr, "Failed to find info segment of file.\n");
		exit(EXIT_FAILURE);
	}

	infostr = bencode_val_string(info, &infostrlen);

	hash = sha1(infostr, infostrlen, &hashlen);

	for(i = 0; i < hashlen; i++)
		printf("%.2hhX", hash[i]);
	puts("");

	free(infostr);
	free(hash);
	free(benstring);
	bencode_free_recursive(benval);

	exit(EXIT_SUCCESS);
}