@@ -123,7 +123,7 @@ struct OAuth2 {
123123 access_token : String ,
124124}
125125
126- #[ derive( Debug ) ]
126+ #[ derive( Debug , Default ) ]
127127pub ( crate ) struct ServerMetadata {
128128 /// IMAP METADATA `/shared/comment` as defined in
129129 /// <https://www.rfc-editor.org/rfc/rfc5464#section-6.2.1>.
@@ -1546,17 +1546,17 @@ impl Session {
15461546 Ok ( ( ) )
15471547 }
15481548
1549- /// Retrieves server metadata if it is supported.
1549+ /// Retrieves server metadata if it is supported, otherwise uses fallback one .
15501550 ///
15511551 /// We get [`/shared/comment`](https://www.rfc-editor.org/rfc/rfc5464#section-6.2.1)
15521552 /// and [`/shared/admin`](https://www.rfc-editor.org/rfc/rfc5464#section-6.2.2)
15531553 /// metadata.
1554- pub ( crate ) async fn fetch_metadata ( & mut self , context : & Context ) -> Result < ( ) > {
1554+ pub ( crate ) async fn update_metadata ( & mut self , context : & Context ) -> Result < ( ) > {
1555+ let mut lock = context. metadata . write ( ) . await ;
1556+
15551557 if !self . can_metadata ( ) {
1556- return Ok ( ( ) ) ;
1558+ * lock = Some ( Default :: default ( ) ) ;
15571559 }
1558-
1559- let mut lock = context. metadata . write ( ) . await ;
15601560 if let Some ( ref mut old_metadata) = * lock {
15611561 let now = time ( ) ;
15621562
@@ -1565,31 +1565,33 @@ impl Session {
15651565 return Ok ( ( ) ) ;
15661566 }
15671567
1568- info ! ( context, "ICE servers expired, requesting new credentials." ) ;
1569- let mailbox = "" ;
1570- let options = "" ;
1571- let metadata = self
1572- . get_metadata ( mailbox, options, "(/shared/vendor/deltachat/turn)" )
1573- . await ?;
15741568 let mut got_turn_server = false ;
1575- for m in metadata {
1576- if m. entry == "/shared/vendor/deltachat/turn"
1577- && let Some ( value) = m. value
1578- {
1579- match create_ice_servers_from_metadata ( context, & value) . await {
1580- Ok ( ( parsed_timestamp, parsed_ice_servers) ) => {
1581- old_metadata. ice_servers_expiration_timestamp = parsed_timestamp;
1582- old_metadata. ice_servers = parsed_ice_servers;
1583- got_turn_server = true ;
1584- }
1585- Err ( err) => {
1586- warn ! ( context, "Failed to parse TURN server metadata: {err:#}." ) ;
1569+ if self . can_metadata ( ) {
1570+ info ! ( context, "ICE servers expired, requesting new credentials." ) ;
1571+ let mailbox = "" ;
1572+ let options = "" ;
1573+ let metadata = self
1574+ . get_metadata ( mailbox, options, "(/shared/vendor/deltachat/turn)" )
1575+ . await ?;
1576+ for m in metadata {
1577+ if m. entry == "/shared/vendor/deltachat/turn"
1578+ && let Some ( value) = m. value
1579+ {
1580+ match create_ice_servers_from_metadata ( context, & value) . await {
1581+ Ok ( ( parsed_timestamp, parsed_ice_servers) ) => {
1582+ old_metadata. ice_servers_expiration_timestamp = parsed_timestamp;
1583+ old_metadata. ice_servers = parsed_ice_servers;
1584+ got_turn_server = true ;
1585+ }
1586+ Err ( err) => {
1587+ warn ! ( context, "Failed to parse TURN server metadata: {err:#}." ) ;
1588+ }
15871589 }
15881590 }
15891591 }
15901592 }
1591-
15921593 if !got_turn_server {
1594+ info ! ( context, "Will use fallback ICE servers." ) ;
15931595 // Set expiration timestamp 7 days in the future so we don't request it again.
15941596 old_metadata. ice_servers_expiration_timestamp = time ( ) + 3600 * 24 * 7 ;
15951597 old_metadata. ice_servers = create_fallback_ice_servers ( context) . await ?;
0 commit comments