-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsender.c
More file actions
78 lines (64 loc) · 1.79 KB
/
sender.c
File metadata and controls
78 lines (64 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "bp_socket.h"
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#define AF_BP 28
int main(int argc, char *argv[]) {
struct sockaddr_bp dest_addr, src_addr;
int fd;
uint32_t node_id, service_id;
int ret = 0;
if (argc < 3) {
printf("Usage: %s <node_id> <service_id>\n", argv[0]);
return EXIT_FAILURE;
}
node_id = (uint32_t)atoi(argv[1]);
service_id = (uint32_t)atoi(argv[2]);
if (service_id < 1 || service_id > 255) {
fprintf(stderr, "Invalid service_id (must be in 1-255)\n");
return EXIT_FAILURE;
}
if (node_id == 0) {
fprintf(stderr, "Invalid node_id (cannot be 0)\n");
return EXIT_FAILURE;
}
fd = socket(AF_BP, SOCK_DGRAM, 0);
if (fd < 0) {
perror("socket creation failed");
return EXIT_FAILURE;
}
src_addr.bp_family = AF_BP;
src_addr.bp_scheme = BP_SCHEME_IPN;
src_addr.bp_addr.ipn.node_id = 10;
src_addr.bp_addr.ipn.service_id = 2;
if (bind(fd, (struct sockaddr *)&src_addr, sizeof(src_addr)) == -1) {
perror("Failed to bind socket");
ret = EXIT_FAILURE;
goto out;
}
dest_addr.bp_family = AF_BP;
dest_addr.bp_scheme = BP_SCHEME_IPN;
dest_addr.bp_addr.ipn.node_id = node_id;
dest_addr.bp_addr.ipn.service_id = service_id;
char *message = "Hello!";
int flags = 0;
flags |= MSG_ACK_REQUESTED;
// flags |= MSG_RECEIVED_RPT;
// flags |= MSG_DELIVERED_RPT;
// flags |= MSG_BP_EXPEDITED_PRIORITY;
// flags |= MSG_SOURCE_CUSTODY_OPTIONAL;
ret = sendto(fd, message, strlen(message) + 1, flags,
(struct sockaddr *)&dest_addr, sizeof(dest_addr));
if (ret < 0) {
perror("sendto failed");
ret = EXIT_FAILURE;
goto out;
}
printf("Message sent successfully: %s\n", message);
out:
close(fd);
return ret;
}