10年以上C/C++しかやってなかった30代SEがwebを頼りに色々初挑戦してみるブログ

最近の流行り?に則って、ブログ名にすべてを詰め込んだ

COVID19Radarのソースを追ってみる5日目(一旦終了)

4日目はこちら

引き続きCOCOA(接触確認アプリ)のベースとして使用されているOSS(オープンソースソフトウェア)である、COVID19Radarについて、処理を追って日本語のコメントを付けてみた。

ただ、C#の経験もFultter以外のAndroid開発の経験もなく、苦戦した挙句ざっくり理解で止めた1ので、参考程度で。

なので、同じようなことしている人がいれば即やめ。
ソースべた貼りには少し抵抗があるので、コメント付近だけ抜粋。

はじめに

最新ソースみてやっと理解できたけど、やっぱりXamarin.ExposureNotificationsってのが通信している箇所だった。
なんでXamarinってついてるかは不明だけど、ExposureNotificationってのがGoogleAPIと繋いでるところっぽく、それらを管理してるから複数形でXamarin.ExposureNotifications

今回は今までと違って逆追い。調べやすい かつ 気になったところから順次
あと実際に動作させることが出来ないので、挙動差の調査は割愛

そしてGoogleAPIの仕様も見つけた。

調査対象

  • ソース(GitHub):https://github.com/Covid-19Radar/Covid19Radar
  • リビジョン:5a54949ddf51dbf0db58c09d4142a31c7d663076 7400889696421ed3ad0e592e59821b8e354d20bc
    ※最新だとXamarin.ExposureNotificationsに該当するソースがUPされていたので、調査対象を最新に切り替え。(どのみち挙動差を見られないので。。)

ExposureDetectedAsync

陽性接触者情報っぽいやつ(ExposureInformation)を登録している箇所

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Services\ExposureNotificationHandler.cs
  • 詳細:
    • [ExposureInfo]と[ExposureSummary]を保持。保持するデータの内容はGoogleAPIの仕様参照
    • foreach (var i in exposureInfo)=exposureInfoの数だけくり返し処理
    • userData.ExposureInformation=陽性接触者情報?
    • add=追加(=登録)
if (userData.IsNotificationEnabled)
{
    // [通知]設定がONの場合
    // [新型コロナウイルス陽性登録者との接触の可能性]を通知
}

UploadSelfExposureKeysToServerAsync

自分が陽性者であることを登録をしている箇所

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Services\ExposureNotificationHandler.cs
  • 詳細:
    • [TemporaryExposureKey]を送信。送信するデータの内容はGoogleAPIの仕様参照
    • CreateSubmissionAsync=通信用のデータに変換しているところ。 [TemporaryExposureKey]以外にも色々送ってる
      • SubmissionNumber = 処理番号
      • AppPackageName = アプリ名
      • UserUuid = 最初の規約同意の時に作ってた鍵的なやつ
      • Platform = 端末の種類,android or iOS
      • Regions = リージョン,国情報?
      • Keys = TemporaryExposureKey
      • VerificationPayload = これも処理番号。データチェック用かな?
    • httpDataService=たぶんサーバーと通信してるところ

FetchExposureKeyBatchFilesFromServerAsync

たぶん鍵同士の接触情報を登録しているところ?
なんか挙動が逆な(サーバーから接触情報とってる)ようにも見える。。。

仕組み的には端末で情報収集してサーバーに送るって感じのはずだからこれでいいとは思うけど、自信ない。

あと、この処理自体は呼び出しが未実装(動作しないように消されてる)だった。よく分かってないけど、実はプレビュー版ってまだ実運用始まってないってレベルなのかね?
だとしたら、何をテストしてるんだろ?

  • ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Services\ExposureNotificationHandler.cs
  • 詳細:
    • DateTimeOffset.UtcNow=現在の日時
    • foreach (var serverRegion in AppSettings.Instance.SupportedRegions)=対応しているリージョン(国?)の数だけくり返し
    • DownloadBatchAsync=端末に登録されてる接触情報を取得?
    • submitBatches=陽性接触者情報との照合?

今日のまとめ

GoogleAPIの仕様も見つけたし、気になるところは一通りみれたはずなので、COVID19Radarのソース読みは一旦終了。

当然、変なデータ送ってるところは見つかりませんでした。

ただ、どうにも実際に動いてるか分かってない感じだったから、バージョンアップしたらもう一回見てみるかな。


  1. 開発環境でもインストールしてデバッグしながら、とかならもう少し理解できたんだと思うけど、開発環境入れるだけで力尽きそうだったので諦めた。。