WELCOME TO THE FUTURE Agenda • Task 1, Task 2, Task 3. • SMTP server & client. Project presentation. • SMTP server. Task 1 Implement a dynamically sized list of c strings. Idea To implement linked list using arrays of pointers. First element of array is c-string, second element of array is address to another analogous array. All this arrays is called “nodes”, first array – “head”. Task 2 int Class that can store single values of C++ fundamental types bool char float Ideas • We can make a class with template struct “Holder” that holds an object. • We can make a class with union that holds an object. It is easier to understand and implement. Task 3 Application that counts blank lines, comment lines, and physical lines of source code written in C/C++ //comments {code;} //comments Idea We can use filesystem library to open project directory. Then we open *cpp, *h, *hpp and *C files in different threads. I have method to create statistics for me. Finally, I write statistics to the file. I use a lot of libraries, such as: <filesystem>, <thread>, <mutex>, <vector>, etc. Any questions? I can show a code, if you want… Project Description SMTP server & client • SMTP (Simple Mail Transfer Protocol) Server that’s primary purpose is to send, receive, and relay outgoing mail between email senders and receivers. • SMTP client (Sender-SMTP) that communicates with the SMTP server (Receiver-SMTP) using a predefined strict set of case insensitive commands. Among them HELO, EHLO, MAIL, RCPT, DATA, QUIT are always implemented by all SMTP servers. SMTP server & client • SMTP Server should be background process (Linux – daemon, Windows – service). Server should read configuration from *.xml or *.json file and should have logger. Server should contain email messages. Requests/Responses between server and client should be encrypted. General suggestions • Structure your sources. Separate shared and sourced code. Shared code we can use for server and client. • Use a code style proposed by the IT academy. • Use relative path to log and configuration file to executable file or server. • Prefer allocating data on heap for objects and arrays. • Prefer design classes where is needed. • Use const and constexp as more as possible. General suggestions • Use as more as possible modern C++ 14 and C++ 17 features to optimize the code. • Validate data before use it. • Constructor should not have hard functionality. Implement initialize method instead for example. • 50-90% of functions and methods should return bool value. • Use C++ smart pointers. • Use STL and Boost. • Use SQL database for storing data. Project components 1. SMTP (TCP/IP) Server (Sockets) – Kostiantyn Yehorov 2. SMTP/POP3 (TCP/IP) Client, Installer – Roman Smachylo 3. C++ Logger (common for Server and Client) – Yaroslav Masyna 4. Server configuration parser, config parser (for Server and Client) – Oksana Bisyk 5. CI/CD Jenkins – Volodymyr Seredovych 6. Windows Service, Installer – Oleg Matseyko 7. SQL DataBase – Max Andrusenko 8. Encryption and decryption SMTP Server SoftServe Confidential