aboutsummaryrefslogtreecommitdiffhomepage
path: root/backends/rtpmidi.h
diff options
context:
space:
mode:
authorcbdev <cb@cbcdn.com>2020-04-02 23:52:28 +0200
committercbdev <cb@cbcdn.com>2020-04-02 23:52:28 +0200
commitbc6b25e14f3ddd8a405a974a4a2e03b9a71d4c9d (patch)
tree2038cb09e662bcda2004540b4893a9b6914a0cda /backends/rtpmidi.h
parente8d87602618b4a9fab056f1d03b87c706d5f1f9f (diff)
downloadmidimonster-bc6b25e14f3ddd8a405a974a4a2e03b9a71d4c9d.tar.gz
midimonster-bc6b25e14f3ddd8a405a974a4a2e03b9a71d4c9d.tar.bz2
midimonster-bc6b25e14f3ddd8a405a974a4a2e03b9a71d4c9d.zip
Implement basic DNS parsing
Diffstat (limited to 'backends/rtpmidi.h')
-rw-r--r--backends/rtpmidi.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/backends/rtpmidi.h b/backends/rtpmidi.h
index a08cf0f..b1fe26a 100644
--- a/backends/rtpmidi.h
+++ b/backends/rtpmidi.h
@@ -8,6 +8,7 @@ static int rtpmidi_configure(char* option, char* value);
static int rtpmidi_configure_instance(instance* instance, char* option, char* value);
static int rtpmidi_instance(instance* inst);
static channel* rtpmidi_channel(instance* instance, char* spec, uint8_t flags);
+static uint32_t rtpmidi_interval();
static int rtpmidi_set(instance* inst, size_t num, channel** c, channel_value* v);
static int rtpmidi_handle(size_t num, managed_fd* fds);
static int rtpmidi_start(size_t n, instance** inst);
@@ -22,6 +23,11 @@ static int rtpmidi_shutdown(size_t n, instance** inst);
#define RTPMIDI_DEFAULT_NAME "MIDIMonster"
#define RTPMIDI_SERVICE_INTERVAL 1000
+#define DNS_POINTER(a) (((a) & 0xC0) == 0xC0)
+#define DNS_LABEL_LENGTH(a) ((a) & 0x3F)
+#define DNS_OPCODE(a) (((a) & 0x78) >> 3)
+#define DNS_RESPONSE(a) ((a) & 0x80)
+
enum /*_rtpmidi_channel_type*/ {
none = 0,
note = 0x90,
@@ -90,6 +96,12 @@ enum applemidi_command {
apple_feedback = 0x5253 //RS
};
+typedef struct /*_dns_name*/ {
+ size_t alloc;
+ char* name;
+ size_t length;
+} dns_name;
+
#pragma pack(push, 1)
typedef struct /*_apple_session_command*/ {
uint16_t res1;
@@ -128,4 +140,25 @@ typedef struct /*_rtp_midi_command*/ {
uint8_t flags;
uint8_t length;
} rtpmidi_command_header;
+
+typedef struct /*_dns_header*/ {
+ uint16_t id;
+ uint8_t flags[2];
+ uint16_t questions;
+ uint16_t answers;
+ uint16_t servers;
+ uint16_t additional;
+} dns_header;
+
+typedef struct /*_dns_question*/ {
+ uint16_t qtype;
+ uint16_t qclass;
+} dns_question;
+
+typedef struct /*_dns_rr*/ {
+ uint16_t rtype;
+ uint16_t rclass;
+ uint32_t ttl;
+ uint16_t data;
+} dns_rr;
#pragma pack(pop)