Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make esp_mbedtls_server_session_create async compatible (IDFGH-13606) #14493

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

thetek42
Copy link

@thetek42 thetek42 commented Sep 3, 2024

This makes esp_mbedtls_server_session_create async-friendly by splitting up the function into two parts. This change was originally proposed here in order to make an asynchronous TLS server possible: esp-rs/esp-idf-svc#368 (comment)

@CLAassistant
Copy link

CLAassistant commented Sep 3, 2024

CLA assistant check
All committers have signed the CLA.

Copy link

github-actions bot commented Sep 3, 2024

Messages
📖 🎉 Good Job! All checks are passing!

👋 Hello thetek42, we appreciate your contribution to this project!


📘 Please review the project's Contributions Guide for key guidelines on code, documentation, testing, and more.

🖊️ Please also make sure you have read and signed the Contributor License Agreement for this project.

Click to see more instructions ...


This automated output is generated by the PR linter DangerJS, which checks if your Pull Request meets the project's requirements and helps you fix potential issues.

DangerJS is triggered with each push event to a Pull Request and modify the contents of this comment.

Please consider the following:
- Danger mainly focuses on the PR structure and formatting and can't understand the meaning behind your code or changes.
- Danger is not a substitute for human code reviews; it's still important to request a code review from your colleagues.
- To manually retry these Danger checks, please navigate to the Actions tab and re-run last Danger workflow.

Review and merge process you can expect ...


We do welcome contributions in the form of bug reports, feature requests and pull requests via this public GitHub repository.

This GitHub project is public mirror of our internal git repository

1. An internal issue has been created for the PR, we assign it to the relevant engineer.
2. They review the PR and either approve it or ask you for changes or clarifications.
3. Once the GitHub PR is approved, we synchronize it into our internal git repository.
4. In the internal git repository we do the final review, collect approvals from core owners and make sure all the automated tests are passing.
- At this point we may do some adjustments to the proposed change, or extend it by adding tests or documentation.
5. If the change is approved and passes the tests it is merged into the default branch.
5. On next sync from the internal git repository merged change will appear in this public GitHub repository.

Generated by 🚫 dangerJS against 083b396

@espressif-bot espressif-bot added the Status: Opened Issue is new label Sep 3, 2024
@github-actions github-actions bot changed the title Make esp_mbedtls_server_session_create async compatible Make esp_mbedtls_server_session_create async compatible (IDFGH-13606) Sep 3, 2024
Copy link
Collaborator

@AdityaHPatwardhan AdityaHPatwardhan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR @thetek42,
I agree that an async version would be helpful.
So the mbedtls is an internal layer for esp-tls.
It is not supposed to be directly used publicly (outside of esp-tls component)
Instead I think we should create appropriate APIs for the esp-tls layer and use that layer publicly.

components/esp-tls/esp_tls_mbedtls.c Outdated Show resolved Hide resolved
components/esp-tls/esp_tls_mbedtls.c Outdated Show resolved Hide resolved
components/esp-tls/esp_tls_mbedtls.c Outdated Show resolved Hide resolved
@espressif-bot espressif-bot added Status: In Progress Work is in progress and removed Status: Opened Issue is new labels Sep 20, 2024
@thetek42
Copy link
Author

thetek42 commented Oct 7, 2024

@AdityaHPatwardhan I updated the function names and also ported them to both WolfSSL and esp-tls.

Copy link
Collaborator

@AdityaHPatwardhan AdityaHPatwardhan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for updating the PR.
Just a couple of suggestions, otherwise looks good to me

@@ -90,6 +92,8 @@ static const char *TAG = "esp-tls";
#define _esp_tls_conn_delete esp_wolfssl_conn_delete
#define _esp_tls_net_init esp_wolfssl_net_init
#define _esp_tls_server_session_create esp_wolfssl_server_session_create
#define _esp_tls_server_session_init esp_wolfssl_server_session_init
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can keep them as NULL and then handle it esp_tls_server_session_init down below by returning failure in the API that is calling this function when it is NULL.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry for the misunderstanding, but can you please clarify what your suggestion here is?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I meant that the support for wolfSSL need not be added. Since I am not sure if you have tested the wolfSSL support yourself and we dont require wolfSSL support to be added so we can just mark the _esp_tls_server_session_create as NULL.

and in the esp_tls_server_session_create API where you use _esp_tls_server_session_create
you can just handle this case by doing something like

if (_esp_tls_server_session_create == NULL) {
    return ESP_ERR_NOT_SUPPORTED.
}

/**
* @brief Initialization part of esp_tls_server_session_create
*/
int esp_tls_server_session_init(esp_tls_cfg_server_t *cfg, int sockfd, esp_tls_t *tls)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regarding the new API.
Is it possible to keep the return type as esp_err_t in this case.
I think this would go well with the other APIs added in esp_tls.h.
Sorry for the late suggestion, I can also do this in a supplementary commit.

return _esp_tls_server_session_init(cfg, sockfd, tls);
}
/**
* @brief Asynchronous continue of esp_tls_server_session_create, to be
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* @brief Asynchronous continue of esp_tls_server_session_create, to be
* @brief Asynchronous continue of esp_tls_server_session_create, to be
* called in a loop by the user until it returns 0. If this functions returns something other than 0, ESP_TLS_ERR_SSL_WANT_READ or ESP_TLS_ERR_SSL_WANT_WRITE, the esp-tls context must not be used and should be freed using esp_tls_conn_destroy();

@AdityaHPatwardhan
Copy link
Collaborator

AdityaHPatwardhan commented Oct 16, 2024

@thetek42 Actually, if it is fine with you, I can take over the PR. Please squash your changes in one commit. I will update my changes on a separate commit so your contribution would still be visible.

@thetek42
Copy link
Author

PR updated. Thanks!

@AdityaHPatwardhan AdityaHPatwardhan self-assigned this Oct 16, 2024
@AdityaHPatwardhan
Copy link
Collaborator

sha=083b39640524dc96d5bccffc396667f5f3a616f3

@AdityaHPatwardhan AdityaHPatwardhan added the PR-Sync-Merge Pull request sync as merge commit label Oct 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
PR-Sync-Merge Pull request sync as merge commit Status: In Progress Work is in progress
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants