Giter Club home page Giter Club logo

mdns-impl's Introduction

Introduction

Hello! My name, or psuedonym I guess, is Nukkel. A 17-year-old developer from the US.

I have been programming for 6 years and am currently interested in a variety of topics (see my pins) mostly oriented towards lower-level programming. Additionally, I am one of the programming leads for FRC 2046. The majority of my development happens in Rust, consequentially the programming language I am most experienced with, but I choose the best fitting toolset for a project regardless of language.

I have heavy interest in:

  • Compilers and Programming Language Development
  • GPU-related Programming (primarily with wgpu)
  • Data Compression
  • Robotics
  • Performance

I have minor interest in:

  • Distributed Systems
  • AI (I don't know enough to specify further)

What am I working on right now (02/23/24)?

Right now I am working on mdns-impl. An implementation and exploration of the mdns/dns-sd protocol in pure rust to get more familiar with implementing specifications, creating libraries, and unit testing. This is a precursor for another project I am working on lanp2p2, a rewrite of a P2P TUI chat client I wrote prior last year. I am focused on learning as many new things as I can right now so I can familiarize myself with common practices in larger scale projects.

mdns-impl's People

Contributors

nukkeldev avatar

Stargazers

 avatar

Watchers

 avatar

mdns-impl's Issues

`BrowsingContext`: An asynchronous, pollable service discovery struct

BrowsingContext allows for the user to declare a single, or multiple, type(s) of services they are interested in and poll the instance to get discovered Services.

Usage of this might look something like:

let ctx: BrowsingContext = BrowsingContext::new().query("_http._tcp.local").query("_http-alt._tcp.local").search();
let mut services = vec![];

loop {
    if let Some(service) = ctx.poll() {
        services.push(service);
    }

    // ...
}

I take inspiration to other APIs that do similar things, such as sockets, IO, etc., and have a sort of queue-based polling system which I think works well for now. If not, I can change it at a later date, but it will suffice for an initial implementation.

Revert to using `Vec<u8>` instead of `BitVec<u8, Msb0>`

Although it was interesting to experiment with BitVecs, I realize that I don't use their functionality much and they've become unnecessary.

Revert to using Vec<u8> with more bitwise operations to extract values.

Tasks:

  • Revert to Vec
  • Private all fields on structs and add getters and builder-setters instead.

Expand the public API with higher-level functionality for browsing

The project is at a state wherein pretty much all of the lower-level functionality, parsing and packing of DNS Packets, is implemented in a functional way. Because of this, we can now write browsing functionality so users of the library don't need to manually compose and send the packets.

This is more of a meta-issue or an initializer for the initial fleshing out of this functionality. It's fairly simple to implement but I want multithreading support which I need to look into more.

Tasks:

  • Tighten packet-related visibility so that it is not user facing anymore.
  • Write an BrowsingContext struct that asynchronously browses for services that the user can consume.
  • Parse TXT and SRV records into Service structs.

Library Crate

Convert the current binary crate into a library and re-implement the user-facing functionality into an example.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.