www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - My simple internet client made in Dlang.

reply Marcone <marcone email.com> writes:
I study Dlang for just over a year only and have already risked 
creating a program even with a graphical interface and distribute 
it on the internet. Here is a part of that program, just the code 
without a graphical interface. It is a program for modifying http 
headers. You connect your program to the local port of this 
script, this script plays the role of a server to receive your 
program. Receive the HTTP request from the program, connect to 
the remote server playing a client role, modify the HTTP request 
from the program and connect to the remote server.


I would like the completely relevant opinion of you my programmer 
friends in Dlang if my code is good or if it is very noob.

My Code: 
https://github.com/cerejavermelha/Dlang-Client-Server-Socket-Dropbear-Injector/blob/master/Dlang_Client_Server_Socket_Dropbear_Injector.d
Feb 03 2021
parent reply =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 2/3/21 8:44 AM, Marcone wrote:
 relevant opinion
I think the following would be improvements:
    char[8192] request;
I don't know the protocol but obviously 8192 must be sufficient.
    auto rq = c.receive(request);
So, what is actually received is request[0..rq]. I would call the first one 'buffer' and the actual part 'request': char[8192] buffer; const length = c.receive(buffer); enforce (length != Socket.ERROR, "Failed to read from socket."); auto request = buffer[0 .. length]; Each to!string is an extra copy below (and more in your code):
    string host = 
to!string(request)[to!string(request).indexOf("CONNECT")+7..to!string(request).indexOf(":")].strip(); I would make a variable first (you can find better variable names :) ): string str = to!string(request); const conn = str.indexOf("CONNECT") + 7; const colon = str.indexOf(":"); const http = str.indexOf("HTTP/"); string host = str[conn .. colon].strip(); string port = str[colon + 1 .. http].strip(); Even though performance of multiple to!string calls is not detectable in this program that interacts with sockets, I still think reducing the calls to to!string helps with readability and is less error-prone. :) Ali
Feb 04 2021
parent Max Haughton <maxhaton gmail.com> writes:
On Thursday, 4 February 2021 at 20:54:15 UTC, Ali Çehreli wrote:
 On 2/3/21 8:44 AM, Marcone wrote:
 [...]
I think the following would be improvements:
    [...]
I don't know the protocol but obviously 8192 must be sufficient. [...]
Less calls to std.conv can also mean less surface area for exceptions to throw from
Feb 04 2021