// Exercise the real runtime and the SDK's real subnet gateway, without a login UI or OS routes. #include "transport.h" #include #include #include #include #include #include #include #include #include #include #include #define CHECK(x) do{if(!(x)){std::fprintf(stderr,"line %d: %s errno=%d\n",__LINE__,#x,errno);std::abort();}}while(0) using namespace mt::meshport; sockaddr_in endpoint(const char* host,int port){sockaddr_in result{};result.sin_family=AF_INET;result.sin_port=htons(port);CHECK(inet_pton(AF_INET,host,&result.sin_addr)==1);return result;} int tcp(int port){ int fd=::socket(AF_INET,SOCK_STREAM,0);CHECK(fd>=0);fcntl(fd,F_SETFL,O_NONBLOCK); CHECK(connect_socket(fd,endpoint("10.253.79.1",port))==-1);CHECK(pending(fd)); auto deadline=std::chrono::steady_clock::now()+std::chrono::seconds(70);int state=0; while(!state&&std::chrono::steady_clock::now()(size)); char data[128]{};size_t got=0;while(got0);got+=count;} CHECK(got==size&&std::memcmp(data,text,size)==0);finish(fd); } int main(int argc,char** argv){ CHECK(argc==4);std::ifstream input(argv[1]);CHECK(input.good());std::string config((std::istreambuf_iterator(input)),{}); // An invalid profile fails without direct fallback; a later request can retry with a valid profile. configure("invalid saved profile"); int failed=::socket(AF_INET,SOCK_STREAM,0);CHECK(failed>=0);fcntl(failed,F_SETFL,O_NONBLOCK); CHECK(connect_socket(failed,endpoint("10.253.79.1",std::atoi(argv[2])))==-1); int failed_state=0;auto failed_deadline=std::chrono::steady_clock::now()+std::chrono::seconds(5); while(!failed_state&&std::chrono::steady_clock::now()=0);fcntl(fd,F_SETFL,O_NONBLOCK); auto local=endpoint("127.0.0.1",udp_port);auto remote=endpoint("10.253.79.1",udp_port); CHECK(send_datagram(fd,"LAN",3,0,local)==3); sockaddr_in source{};char data[128]{};ssize_t count=-1; for(int i=0;i<3000&&count<0;++i){count=recv_datagram(fd,data,sizeof(data),0,&source);std::this_thread::sleep_for(std::chrono::milliseconds(1));} CHECK(count==3&&std::memcmp(data,"LAN",3)==0&&source.sin_addr.s_addr==local.sin_addr.s_addr); CHECK(take_event()==0); // Local traffic has not started the runtime. CHECK(send_datagram(fd,"MESH",4,0,remote)==4); // First remote operation is UDP, not login. auto deadline=std::chrono::steady_clock::now()+std::chrono::seconds(70); while(!datagram_ready(fd)&&std::chrono::steady_clock::now()0);count=::recv(http,data,sizeof(data)-1,0);CHECK(count>0); data[count]=0;CHECK(std::strstr(data,"200 OK")&&std::strstr(data,"OK\n"));finish(http); // A new request outside every learned route stays pending; it must not connect directly. int missing=::socket(AF_INET,SOCK_STREAM,0);CHECK(missing>=0);fcntl(missing,F_SETFL,O_NONBLOCK); CHECK(connect_socket(missing,endpoint("10.252.79.1",tcp_port))==-1);CHECK(pending(missing)); CHECK(poll_socket(missing)==0);socklen_t len=sizeof(source);CHECK(getpeername(missing,reinterpret_cast(&source),&len)<0); finish(missing);finish(fd);shutdown(); std::puts("Real SDK: LAN bypass, UDP-first DHCP, UDP source/peek, concurrent TCP, HTTP, reconnect and missing-route cancellation passed"); }