rep/gts.c
2024-07-09 13:56:00 +01:00

102 lines
2.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include "rep.h"
int
get_ip_from_dns(const char *domain, char *ip)
{
int sock;
struct sockaddr_in serv_addr;
char buffer[BUFFER_SIZE] = {0};
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("Socket creation error");
return -1;
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(RNS_PORT);
if (inet_pton(AF_INET, DNS_SERVER_ADDR, &serv_addr.sin_addr) <= 0) {
perror("Invalid address / Address not supported");
return -1;
}
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
perror("Connection failed");
return -1;
}
send(sock, domain, strlen(domain), 0);
read(sock, buffer, BUFFER_SIZE);
close(sock);
if (strcmp(buffer, "Domain not found\n") == 0) {
return -1;
}
strcpy(ip, buffer);
return 0;
}
int
main()
{
char domain[BUFFER_SIZE] = "nky.xyz";
char ip[BUFFER_SIZE] = {0};
char query[BUFFER_SIZE] = {0};
char response[BUFFER_SIZE] = {0};
int sock;
struct sockaddr_in serv_addr;
printf("Resolving %s's IP =>\n", domain);
if (get_ip_from_dns(domain, ip) < 0) {
printf("Failed to resolve domain\n");
return -1;
}
// Step 2: Connect to the search engine server
printf("Resolved IP from rns: %s\n", ip);
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("Socket creation error");
return -1;
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(V12_PORT);
if (inet_pton(AF_INET, ip, &serv_addr.sin_addr) <= 0) {
perror("Invalid address / Address not supported");
return -1;
}
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
perror("Connection failed");
return -1;
}
printf("Enter search query: ");
fflush(stdout);
fgets(query, BUFFER_SIZE, stdin);
query[strcspn(query, "\n")] = '\0'; // Remove the newline character
send(sock, query, strlen(query), 0);
printf("Repositories found:\n");
while (read(sock, response, BUFFER_SIZE) > 0) {
printf("%s", response);
memset(response, 0, BUFFER_SIZE); // Clear the buffer for the next read
}
close(sock);
return 0;
}