Change license to AGPL
This commit:
- Updates the `LICENSE` file
- Start every file with something like:
// Copyright YEAR_FIRST_PUBLISHED Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
---
First, I removed existing license headers with this Ruby 3.1.2 script:
require 'set'
EXTENSIONS_TO_CHECK = Set['.h', '.hpp', '.cpp', '.m', '.mm', '.pch', '.swift']
same = 0
different = 0
all_files = `git ls-files`.lines.map { |line| line.strip }
all_files.each do |relative_path|
if relative_path == 'Pods'
next
end
unless EXTENSIONS_TO_CHECK.include? File.extname(relative_path)
next
end
path = File.expand_path(relative_path)
contents = File.read(path)
new_contents = contents.sub(/\/\/\n\/\/ Copyright .*\n\/\/\n\n/, '')
if contents == new_contents
same += 1
else
different += 1
end
File.write(path, new_contents)
end
puts "updated #{different} file(s), left #{same} untouched"
I'm sure this script could be improved, but it worked well enough.
Then, I created `Scripts/lint/lint-license-headers` and ran it to auto-
fix a lot of files. This changed the mode of some files, but I think
that's actually desirable. For example,
`SignalServiceKit/src/Util/AppContext.m` previously had a mode of
`0755/-rwxr-xr-x`, and it's now `0644/-rw-r--r--`.
Then I fixed some stragglers and updated the precommit script.
See [a similar change in the Desktop app][0].
[0]: 8bfaf598af
Call messages delivered to the NSE have to be handled in the main app,
so they're put in a synced key-value store and the app is notified.
Rings are processed oldest-to-newest in case you get two calls in
succession before the main app awakes. However, if this processing is
interrupted, the store won't get cleared, and the app may try to
process the *old* ring when it's woken up by a *new* ring. This would
*still* be correct (e.g. for showing missed call notifications) except
that the "age" of a ring message is calculated purely on when it makes
it to the user's device, since it was assumed that it would be
processed promptly. Since this is not necessarily the case in these
error scenarios, this commit adds a second timestamp to track the skew
between when the NSE enqueues the call message and when the main app
processes it.
We've observed races between the NSE+app handoff that can cause a
message to be decrypted twice. This works around this by quitting the
NSE if we decide to wake the main app. This isn't a good fix, but it
should address these out-of-sync session issues for now.