summaryrefslogtreecommitdiff
path: root/ratox.c
AgeCommit message (Collapse)Author
2014-09-23Refactor data-structuresFRIGN
2014-09-23Scream if the datafile has 0 lengthsin
2014-09-23Add frienddestroy() and refactor removefriend()sin
friendcreate() populates the fs, frienddestroy() removes the friend related files from the fs. removefriend() only acts on the data from the friend's remove fifo. The "callback" in this case is responsible for reading the fifo like in all other cases (sendfriendtext() etc.). No weird dance with special function arguments to flag "official" removal. All friend related "callbacks" just need to operate on a struct friend *.
2014-09-22Use fsync() on fd in datasave()sin
2014-09-22Refactor removefriend()FRIGN
2014-09-22Add support for removing friendssin
2014-09-22Dump our status message in the status/out file not our nicknamesin
2014-09-22Use number of seconds since epoch as a timestamp for naming files uniquelysin
This breaks if time travel becomes a possibility.
2014-09-22Use O_RDONLY when opening the datafilesin
2014-09-22Remeber to truncate datafile in datasave() in case it shrinkssin
2014-09-22Change datasave() and localinit() to use fd's instead of fp'sFRIGN
2014-09-22Print message before password promptsin
2014-09-22Refactor dataload()FRIGN
Use fd's instead of fp's and simplify the case-handling for encryption.
2014-09-22Refactor fifoflush()FRIGN
After the previous simplification of return-values of fiforead() (exit if there's a more serious issue), fifoflush() can easily be replaced with a oneliner calling fiforead until it returns 0. In case 0 is returned, the underlying fifo will have already been reopened.
2014-09-22Style fixsin
2014-09-22Rename encryptsave to encryptdatafilesin
2014-09-22Allow to encrypt a plain text data file and vice versasin
2014-09-22Inform the user if encryption is enabled but the datafile is not encryptedsin
2014-09-22Print a newline between the banner and the restsin
2014-09-22Allow a client with encrypted support to load non-encrypt datafilessin
2014-09-22Just realloc(), don't leak if we get called more than oncesin
2014-09-22Oopssin
2014-09-22Just check p[0]sin
2014-09-22Forbid empty passwords, keep loopingsin
2014-09-22Make sure to report when .ratox.data doesn't match our encryption configsin
2014-09-22Keep asking for password if it doesn't matchsin
2014-09-22Add support for encrypted save filessin
2014-09-21Add IPv6 supportsin
Default to IPv4.
2014-09-21Lay the ground for IPv6 supportsin
2014-09-21Update nodelistsin
2014-09-21Only close file descriptors when they are not -1sin
2014-09-21Add shutdown() for clean exitFRIGN
This also sends a broadcast to all friends you went offline, leading to an immediate event-feedback.
2014-09-20fiforead() should accept a void * instead of char *sin
Remove ugly casts.
2014-09-20Fix off-by-one bugs when calling fiforead()sin
dirfd should be the first arg to be consistent with other functions.
2014-09-20Refactor sendfriendreq()FRIGN
Put the error-strings in one single data-structure and flush the err-file every time before a new incoming request, so it's empty when the request succeeds.
2014-09-20Implement fiforead()FRIGN
fiforead() automatically reopens a file-descriptor in case it returns EOF (return 0). It returns -1 on error.
2014-09-19Initialize fdmaxsin
2014-09-19Factor out fifoflush() in a separate funcsin
Also flush the fifo for stalled transfers
2014-09-19Clear up the enums and fix implicit condition-bugFRIGN
The OUT_F-type was not clear. Make it easier to see the out-file has no state (=NONE) and is defined for each slot individually. Moreover, in the initial creation, the err-file fell through just because STATIC = 0 and .outfile wasn't defined for it. It was only coincidence this worked and now we have a much more bulletproof implementation.
2014-09-19Handle rejected transferssin
2014-09-19Fix PAUSE/RESUME in file transferssin
The doc lies, if the receiver resumes a transfer you get a control packet with send_receive == 1 and control_type == TOX_FILECONTROL_ACCEPT. We keep state locally and move from PAUSED to INPROGRESS when the above happens.
2014-09-19Add TRANSFER_PAUSED statesin
Doesn't quite work yet though.
2014-09-19Inform the user when a transfer is in progresssin
2014-09-19Fix file transfers + texting to use O_RDONLY for FIFOssin
Just re-open them to clear EOF.
2014-09-19Change global in-fifos from O_RDWR to O_RDONLYFRIGN
O_RDWR is a dirty hack to get around the issue of infinite EOFs while reading an in-FIFO. Instead, stop breaking POSIX and set the FIFOs to O_RDONLY. In case a read returns EOF (r == 0), we reopen the fd. Same will be applied to the friend-fifos (especially file_in), helping us get rid of strange timeouts and heuristics and rather solve the problem the POSIX-way. The only downside to this is that we are blind for writes to the in-FIFOs between catching read == 0 and close(), but this is not an issue. To make reopening as easy as possible, I added a dirfd to all slots. While at it, I changed the initial setup and removed the chdir() in favor of the POSIX-2008-compliant *at-functions. This lets us do stuff without having to use snprintf to build paths and is more bulletproof even in case the directory is renamed.
2014-09-18Missed some moresin
2014-09-18No need to specify modes, default to 0644 and 0777sin
2014-09-18OUT_F is reserved for the edge-case where we don't know if OUT is a STATIC ↵sin
or FOLDER So use STATIC here.
2014-09-18Print a message when we reject a friend requestsin
2014-09-18Allow the user to reject a friend requestsin