Skip to content

Commit bb16ecc

Browse files
cagnuleinclaude
andauthored
Fix Garmin Connect consecutive upload SSL error (#4154)
Fixes #4135 - Users reported that only the first FIT file upload to Garmin Connect succeeded, while consecutive uploads failed with: "SSL routines:ssl3_read_bytes:sslv3 alert bad record mac" Root cause: QNetworkAccessManager was reusing stale SSL connections between consecutive uploads, causing the server to reject the second request due to connection state inconsistency. Solution: Added "Connection: close" header to both uploadFitFile() and uploadActivity() methods to force connection closure after each upload, preventing SSL connection reuse issues. This ensures clean SSL handshakes for every upload request. Co-authored-by: Claude <noreply@anthropic.com>
1 parent 77d18da commit bb16ecc

1 file changed

Lines changed: 11 additions & 0 deletions

File tree

src/garminconnect.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ bool GarminConnect::uploadFitFile(const QString &fitFilePath)
111111
QNetworkRequest request(url);
112112
request.setRawHeader("User-Agent", USER_AGENT);
113113

114+
// CRITICAL: Force connection close to prevent SSL connection reuse issues
115+
// Without this, consecutive uploads fail with "SSL routines:ssl3_read_bytes:sslv3 alert bad record mac"
116+
// because QNetworkAccessManager tries to reuse a stale SSL connection
117+
request.setRawHeader("Connection", "close");
118+
114119
// Use OAuth2 Bearer token for authorization
115120
QString authHeader = "Bearer " + m_oauth2Token.access_token;
116121
request.setRawHeader("Authorization", authHeader.toUtf8());
@@ -1334,6 +1339,12 @@ bool GarminConnect::uploadActivity(const QByteArray &fitData, const QString &fil
13341339
QUrl url(connectApiUrl() + "/upload-service/upload");
13351340
QNetworkRequest request(url);
13361341
request.setRawHeader("User-Agent", "GCM-iOS-5.7.2.1");
1342+
1343+
// CRITICAL: Force connection close to prevent SSL connection reuse issues
1344+
// Without this, consecutive uploads fail with "SSL routines:ssl3_read_bytes:sslv3 alert bad record mac"
1345+
// because QNetworkAccessManager tries to reuse a stale SSL connection
1346+
request.setRawHeader("Connection", "close");
1347+
13371348
request.setRawHeader("Authorization", QString("Bearer %1").arg(m_oauth2Token.access_token).toUtf8());
13381349

13391350
// Perform upload

0 commit comments

Comments
 (0)