Got a user database working with authentication.

This commit is contained in:
ganome 2025-12-05 09:14:41 -07:00
parent d1846c5a27
commit 7bf93623bf
Signed by untrusted user who does not match committer: Ganome
GPG Key ID: 944DE53336D81B83
23 changed files with 2773 additions and 225 deletions

276
AUTHENTICATION.md Normal file
View File

@ -0,0 +1,276 @@
# SCAR Chat - Authentication & Nickname System
## Overview
The SCAR Chat system now includes user authentication with database-backed nicknames. Each client must login with valid credentials before they can send messages or perform actions.
## Authentication Flow
### Server-Side
1. **Client connects** via SSL/TLS
2. **Server waits for LOGIN message**: `LOGIN:username:password`
3. **Server validates credentials** against SQLite database
4. **If valid**: Server sends `LOGIN_SUCCESS:username` and accepts messages from this client
5. **If invalid**: Server sends `LOGIN_FAILED:reason` and blocks messages
6. **All messages must come from authenticated clients** - unauthenticated clients are rejected with `ERROR:Not authenticated`
### Client-Side (Android)
1. User enters server hostname and port
2. Click "Connect" to establish SSL connection
3. After connecting, username/password fields become enabled
4. User enters credentials and clicks "Login"
5. On successful login, credentials fields are disabled and user can send messages
6. All sent messages show the authenticated username in the format: `*{HH:MM:SS}* username: message`
## Message Format
All messages now include timestamp and authenticated username:
```
*{HH:MM:SS}* username: message content
```
**Examples:**
- `*{14:32:45}* alice: Hello everyone!`
- `*{14:32:52}* admin: System message`
- `*{14:33:01}* bob: Nice to meet you`
## Server Authentication Flow
### 1. Parse LOGIN Message
```cpp
LOGIN:username:password
```
Server extracts username and password from the message format.
### 2. Database Lookup
```cpp
if (global_db->authenticate_user(username, password)) {
// Authentication successful
nickname = username;
authenticated = true;
client_nicknames[ssl] = username;
}
```
The database validates the credentials by:
- Checking if user exists
- Checking if user account is active
- Computing SHA256(password + salt) and comparing with stored hash
### 3. Track Authenticated Client
```cpp
std::map<SSL*, std::string> client_nicknames; // Track authenticated clients
std::mutex nicknames_mutex;
```
The server maintains a map of SSL connections to usernames to ensure:
- Only authenticated clients can send messages
- Camera events are attributed to correct user
- Disconnects are properly logged
### 4. Accept/Reject Messages
**Authenticated clients:**
- Messages are accepted and broadcast with nickname
- Format: `*{timestamp}* nickname: message`
- CAMERA_ENABLE/DISABLE events also use nickname
**Unauthenticated clients:**
- Messages are rejected
- Response: `ERROR:Not authenticated. Send LOGIN:username:password`
- Client must send LOGIN message first
## Server API
### Initialize with Database
```cpp
// In main()
global_db = new Database("scar_chat.db");
if (!global_db->initialize()) {
std::cerr << "Failed to initialize database" << std::endl;
return 1;
}
```
### Per-Client Handler
```cpp
void handle_client(SSL *ssl, int client_socket) {
std::string nickname;
bool authenticated = false;
// Wait for LOGIN message
// Validate against database
// If valid, set authenticated = true and nickname = username
// Reject all messages from unauthenticated clients
if (!authenticated) {
SSL_write(ssl, error_msg);
continue;
}
// Process authenticated messages
}
```
## Android Client Flow
### UI Components Added
- **Username Input**: Text field (disabled until connected)
- **Password Input**: Password field (disabled until connected)
- **Login Button**: Sends LOGIN:username:password (disabled until connected)
- **Connection Status**: Shows current connection and login state
### Login Handling
```java
private void attemptLogin() {
String username = usernameInput.getText().toString().trim();
String password = passwordInput.getText().toString().trim();
String loginCmd = "LOGIN:" + username + ":" + password;
chatConnection.sendMessage(loginCmd);
}
```
### Response Handling
```java
@Override
public void onMessageReceived(String message) {
if (message.startsWith("LOGIN_SUCCESS:")) {
// Extract username
currentUsername = message.substring("LOGIN_SUCCESS:".length()).trim();
// Enable chat
connectionStatus.setText("Logged in as: " + currentUsername);
loginBtn.setEnabled(false);
} else if (message.startsWith("LOGIN_FAILED:")) {
// Show error
String reason = message.substring("LOGIN_FAILED:".length()).trim();
Toast.makeText(this, "Login failed: " + reason, Toast.LENGTH_SHORT).show();
}
}
```
### Send Messages with Nickname
```java
private void sendMessage() {
if (mainActivity.getCurrentUsername().isEmpty()) {
Toast.makeText(getContext(), "Please login first", Toast.LENGTH_SHORT).show();
return;
}
String username = mainActivity.getCurrentUsername();
String timestamp = new SimpleDateFormat("HH:mm:ss").format(new Date());
String formattedMsg = "*{" + timestamp + "}* " + username + ": " + message;
}
```
## Database User Management
### Create Users for Testing
```bash
cd build
./dbmanager register alice AlicePassword789 alice@scar.local user
./dbmanager register bob BobPassword000 bob@scar.local user
./dbmanager register admin AdminPass123 admin@scar.local admin
```
### Verify Users
```bash
./dbmanager list
```
### Test Authentication
```bash
./dbmanager authenticate alice AlicePassword789
```
## Running the System
### 1. Setup Database
```bash
cd build
./dbmanager register alice AlicePassword789 alice@scar.local user
./dbmanager register bob BobPassword000 bob@scar.local user
```
### 2. Start Server
```bash
./chat_server ../certs/server.crt ../certs/server.key
```
Server output:
```
Database initialized successfully
SCAR Chat Server listening on port 42317
```
### 3. Connect Android Client
1. Open SCAR Chat app
2. Enter server hostname (e.g., "192.168.1.100")
3. Enter port (42317)
4. Click "Connect"
5. Username/Password fields become enabled
6. Enter credentials: alice / AlicePassword789
7. Click "Login"
8. Send messages - they will appear with nickname "alice"
### 4. Verify Server Logs
```
User authenticated: alice (FD: 4)
User authenticated: bob (FD: 5)
Received: *{14:32:45}* alice: Hello Bob!
```
## Security Considerations
1. **Passwords are NOT transmitted in plain text** - TLS/SSL encrypts all traffic
2. **Passwords are stored securely** - SHA256 with unique salt per user
3. **Each connection is independent** - disconnecting doesn't affect other users
4. **Unauthenticated clients are isolated** - cannot access chat or perform actions
## Error Handling
### Server-Side Errors
| Message | Meaning |
|---------|---------|
| `LOGIN_FAILED:Invalid credentials` | Username not found or password incorrect |
| `ERROR:Not authenticated` | Client tried to send message without logging in |
| `ERROR:Account inactive` | User account has been deactivated |
### Client-Side Errors
| Error | Resolution |
|-------|-----------|
| "Not connected to server" | Click Connect first |
| "Login failed: Invalid credentials" | Check username/password spelling |
| "Please login first" | User must complete login before sending messages |
## Future Enhancements
- Session tokens with expiration
- Multiple devices per user
- Rate limiting per user
- Activity logging
- User profile information
- Message history per user
- Direct messaging between users

View File

@ -17,7 +17,7 @@
android:theme="@style/Theme.SCARChat">
<activity
android:name=".MainActivity"
android:name=".LoginActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@ -25,6 +25,10 @@
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:exported="false" />
</application>
</manifest>

View File

@ -54,14 +54,18 @@ public class ChatConnection {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
connected = true;
if (listener != null) {
listener.onConnected();
}
// Start reading messages
readMessages();
} catch (Exception e) {
connected = false;
if (listener != null) {
listener.onError("Connection failed: " + e.getMessage());
}
}
}).start();
}
@ -70,10 +74,12 @@ public class ChatConnection {
try {
String message;
while (connected && (message = in.readLine()) != null) {
if (listener != null) {
listener.onMessageReceived(message);
}
}
} catch (IOException e) {
if (connected) {
if (connected && listener != null) {
listener.onError("Read error: " + e.getMessage());
}
} finally {
@ -92,12 +98,16 @@ public class ChatConnection {
out.flush();
}
} catch (Exception e) {
if (listener != null) {
listener.onError("Failed to send message: " + e.getMessage());
}
}
}).start();
}
public void disconnect() {
// Run on background thread to avoid NetworkOnMainThreadException
new Thread(() -> {
connected = false;
try {
if (out != null) out.close();
@ -106,8 +116,11 @@ public class ChatConnection {
} catch (IOException e) {
e.printStackTrace();
}
if (listener != null) {
listener.onDisconnected();
}
}).start();
}
public boolean isConnected() {
return connected;

View File

@ -6,13 +6,17 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.*;
import androidx.fragment.app.Fragment;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class ChatFragment extends Fragment {
private TextSwitcher chatDisplay;
private TextView chatDisplay;
private EditText messageInput;
private Button sendBtn, bgColorBtn, textColorBtn;
private SeekBar transparencySlider;
private TextView transparencyValue;
private ScrollView chatScroll;
private MainActivity mainActivity;
@Override
@ -30,6 +34,10 @@ public class ChatFragment extends Fragment {
textColorBtn = root.findViewById(R.id.text_color_btn);
transparencySlider = root.findViewById(R.id.transparency_slider);
transparencyValue = root.findViewById(R.id.transparency_value);
chatScroll = root.findViewById(R.id.chat_scroll);
// Make chat display read-only and scrollable
chatDisplay.setMovementMethod(new android.text.method.ScrollingMovementMethod());
// Send button
sendBtn.setOnClickListener(v -> sendMessage());
@ -61,25 +69,59 @@ public class ChatFragment extends Fragment {
private void sendMessage() {
String message = messageInput.getText().toString().trim();
if (!message.isEmpty()) {
if (mainActivity != null && mainActivity.getChatConnection().isConnected()) {
if (mainActivity == null) {
Toast.makeText(getContext(), "Activity not initialized", Toast.LENGTH_SHORT).show();
return;
}
ChatConnection conn = mainActivity.getChatConnection();
if (conn == null) {
Toast.makeText(getContext(), "Connection not initialized", Toast.LENGTH_SHORT).show();
return;
}
if (!conn.isConnected()) {
Toast.makeText(getContext(), "Not connected to server", Toast.LENGTH_SHORT).show();
return;
}
String username = mainActivity.getCurrentUsername();
if (username == null || username.isEmpty()) {
Toast.makeText(getContext(), "Please login first", Toast.LENGTH_SHORT).show();
return;
}
try {
mainActivity.getChatConnection().sendMessage(message);
addMessage("[You] " + message);
conn.sendMessage(message);
// Format message with timestamp and current username
String timestamp = new SimpleDateFormat("HH:mm:ss", Locale.US).format(new Date());
String formattedMsg = "*{" + timestamp + "}* " + username + ": " + message;
addMessage(formattedMsg);
messageInput.setText("");
} catch (Exception e) {
Toast.makeText(getContext(), "Error sending message: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getContext(), "Not connected", Toast.LENGTH_SHORT).show();
}
}
}
public void addMessage(String message) {
try {
if (chatDisplay != null) {
// Simple text view update (for demo)
// In production, use RecyclerView for better performance
// Append message to existing text
String currentText = chatDisplay.getText().toString();
if (currentText.isEmpty()) {
chatDisplay.setText(message);
} else {
chatDisplay.append("\n" + message);
}
// Auto-scroll to bottom
if (chatScroll != null) {
chatScroll.post(() -> chatScroll.fullScroll(View.FOCUS_DOWN));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

View File

@ -0,0 +1,131 @@
package com.scar.chat;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class LoginActivity extends AppCompatActivity {
private EditText serverInput, portInput, usernameInput, passwordInput;
private Button loginButton;
private TextView infoText;
private ChatConnection chatConnection;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
// Initialize UI components
serverInput = findViewById(R.id.server_input);
portInput = findViewById(R.id.port_input);
usernameInput = findViewById(R.id.username_input);
passwordInput = findViewById(R.id.password_input);
loginButton = findViewById(R.id.login_button);
infoText = findViewById(R.id.info_text);
// Set default values
serverInput.setText("localhost");
portInput.setText("42317");
// Initialize chat connection with callback
chatConnection = new ChatConnection(new ChatConnection.ConnectionListener() {
@Override
public void onConnected() {
runOnUiThread(() -> {
infoText.setText("Connected to server. Sending credentials...");
sendLogin();
});
}
@Override
public void onDisconnected() {
runOnUiThread(() -> {
infoText.setText("Disconnected");
loginButton.setEnabled(true);
});
}
@Override
public void onMessageReceived(String message) {
runOnUiThread(() -> {
if (message.startsWith("LOGIN_SUCCESS:")) {
String username = message.substring("LOGIN_SUCCESS:".length()).trim();
Toast.makeText(LoginActivity.this, "Login successful!", Toast.LENGTH_SHORT).show();
// Start MainActivity and pass the username
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.putExtra("username", username);
intent.putExtra("server", serverInput.getText().toString());
intent.putExtra("port", portInput.getText().toString());
startActivity(intent);
finish();
} else if (message.startsWith("LOGIN_FAILED:")) {
String reason = message.substring("LOGIN_FAILED:".length()).trim();
infoText.setText("Login failed: " + reason);
chatConnection.disconnect();
loginButton.setEnabled(true);
}
});
}
@Override
public void onError(String error) {
runOnUiThread(() -> {
infoText.setText("Error: " + error);
chatConnection.disconnect();
loginButton.setEnabled(true);
});
}
});
// Login button click listener
loginButton.setOnClickListener(v -> onLoginClick());
}
private void onLoginClick() {
String server = serverInput.getText().toString().trim();
String portStr = portInput.getText().toString().trim();
String username = usernameInput.getText().toString().trim();
String password = passwordInput.getText().toString().trim();
// Validate inputs
if (server.isEmpty() || portStr.isEmpty() || username.isEmpty() || password.isEmpty()) {
Toast.makeText(this, "Please fill in all fields", Toast.LENGTH_SHORT).show();
return;
}
try {
int port = Integer.parseInt(portStr);
// Disable button during login
loginButton.setEnabled(false);
infoText.setText("Connecting to server...");
// Connect to server
chatConnection.connect(server, port);
} catch (NumberFormatException e) {
Toast.makeText(this, "Invalid port number", Toast.LENGTH_SHORT).show();
loginButton.setEnabled(true);
}
}
private void sendLogin() {
String username = usernameInput.getText().toString().trim();
String password = passwordInput.getText().toString().trim();
String loginCmd = "LOGIN:" + username + ":" + password;
chatConnection.sendMessage(loginCmd);
}
@Override
protected void onDestroy() {
super.onDestroy();
// Disconnect on background thread to avoid NetworkOnMainThreadException
if (chatConnection != null && chatConnection.isConnected()) {
new Thread(chatConnection::disconnect).start();
}
}
}

View File

@ -19,14 +19,16 @@ import androidx.fragment.app.Fragment;
import com.google.android.material.tabs.TabLayout;
public class MainActivity extends AppCompatActivity implements ChatConnection.ConnectionListener {
private EditText hostInput, portInput;
private Button connectBtn;
private ChatConnection chatConnection;
private ViewPager2 tabPager;
private TabAdapter tabAdapter;
private TabLayout tabLayout;
private TextView connectionStatus;
private int currentBgColor = Color.WHITE;
private int currentTextColor = Color.BLACK;
private String currentUsername = "";
private String serverAddress = "";
private int serverPort = 0;
private static final int PERMISSION_REQUEST_CODE = 100;
@ -35,13 +37,33 @@ public class MainActivity extends AppCompatActivity implements ChatConnection.Co
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get authenticated username and server info from LoginActivity
currentUsername = getIntent().getStringExtra("username");
serverAddress = getIntent().getStringExtra("server");
String portStr = getIntent().getStringExtra("port");
// Handle null values safely
if (currentUsername == null || currentUsername.isEmpty()) {
currentUsername = "Unknown";
}
if (serverAddress == null || serverAddress.isEmpty()) {
serverAddress = "localhost";
}
if (portStr == null || portStr.isEmpty()) {
serverPort = 42317;
} else {
try {
serverPort = Integer.parseInt(portStr);
} catch (NumberFormatException e) {
serverPort = 42317;
}
}
// Request permissions
requestPermissions();
// Initialize UI components
hostInput = findViewById(R.id.host_input);
portInput = findViewById(R.id.port_input);
connectBtn = findViewById(R.id.connect_btn);
connectionStatus = findViewById(R.id.connection_status);
tabPager = findViewById(R.id.tab_pager);
tabLayout = findViewById(R.id.tab_layout);
@ -60,15 +82,13 @@ public class MainActivity extends AppCompatActivity implements ChatConnection.Co
}
}).attach();
// Set default values
hostInput.setText("localhost");
portInput.setText("42317");
connectionStatus.setText("Logged in as: " + currentUsername);
// Connect button listener
connectBtn.setOnClickListener(v -> toggleConnection());
// Initialize chat connection
// Initialize chat connection after fragments are initialized
tabPager.post(() -> {
chatConnection = new ChatConnection(this);
chatConnection.connect(serverAddress, serverPort);
});
// Apply initial colors
applyTheme();
@ -89,47 +109,60 @@ public class MainActivity extends AppCompatActivity implements ChatConnection.Co
}
}
private void toggleConnection() {
if (chatConnection.isConnected()) {
chatConnection.disconnect();
} else {
String host = hostInput.getText().toString();
int port = Integer.parseInt(portInput.getText().toString());
chatConnection.connect(host, port);
}
}
@Override
public void onConnected() {
runOnUiThread(() -> {
connectBtn.setText("Disconnect");
Toast.makeText(this, "Connected!", Toast.LENGTH_SHORT).show();
if (connectionStatus != null) {
connectionStatus.setText("Connected to server");
}
Toast.makeText(MainActivity.this, "Connected to server", Toast.LENGTH_SHORT).show();
});
}
@Override
public void onDisconnected() {
runOnUiThread(() -> {
connectBtn.setText("Connect");
Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show();
connectionStatus.setText("Disconnected");
Toast.makeText(MainActivity.this, "Disconnected from server", Toast.LENGTH_SHORT).show();
});
}
@Override
public void onMessageReceived(String message) {
runOnUiThread(() -> {
if (tabAdapter != null) {
ChatFragment chatFrag = tabAdapter.getChatFragment();
if (chatFrag != null) {
chatFrag.addMessage(message);
try {
// Handle error messages
if (message.startsWith("ERROR:")) {
String error = message.substring("ERROR:".length()).trim();
Toast.makeText(MainActivity.this, "Error: " + error, Toast.LENGTH_SHORT).show();
} else {
// Regular chat message - display in chat fragment
if (tabPager != null && tabPager.getAdapter() != null) {
TabAdapter adapter = (TabAdapter) tabPager.getAdapter();
Fragment fragment = adapter.getFragment(0);
if (fragment instanceof ChatFragment && fragment.isAdded()) {
((ChatFragment) fragment).addMessage(message);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
});
}
@Override
public void onError(String error) {
runOnUiThread(() -> Toast.makeText(this, error, Toast.LENGTH_LONG).show());
runOnUiThread(() -> {
if (connectionStatus != null) {
connectionStatus.setText("Error: " + error);
}
Toast.makeText(MainActivity.this, "Connection error: " + error, Toast.LENGTH_SHORT).show();
});
}
public String getCurrentUsername() {
return currentUsername;
}
private void applyTheme() {
@ -177,5 +210,16 @@ public class MainActivity extends AppCompatActivity implements ChatConnection.Co
ChatFragment getChatFragment() {
return chatFragment;
}
Fragment getFragment(int position) {
switch (position) {
case 0:
return chatFragment;
case 1:
return videoFragment;
default:
return null;
}
}
}
}

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:gravity="center">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SCAR Chat"
android:textSize="32sp"
android:textStyle="bold"
android:gravity="center"
android:layout_marginBottom="32dp" />
<EditText
android:id="@+id/server_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Server Address"
android:inputType="text"
android:layout_marginBottom="12dp" />
<EditText
android:id="@+id/port_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Server Port"
android:inputType="number"
android:layout_marginBottom="12dp" />
<EditText
android:id="@+id/username_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:inputType="text"
android:layout_marginBottom="12dp" />
<EditText
android:id="@+id/password_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword"
android:layout_marginBottom="24dp" />
<Button
android:id="@+id/login_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Login"
android:layout_marginBottom="16dp" />
<TextView
android:id="@+id/info_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textColor="#666666"
android:layout_marginTop="16dp" />
</LinearLayout>

View File

@ -6,43 +6,21 @@
android:orientation="vertical"
android:padding="16dp">
<!-- Connection controls -->
<LinearLayout
<!-- Connection status -->
<TextView
android:id="@+id/connection_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:spacing="8dp">
<EditText
android:id="@+id/host_input"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/host_hint"
android:inputType="text" />
<EditText
android:id="@+id/port_input"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:hint="@string/port_hint"
android:inputType="number" />
<Button
android:id="@+id/connect_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/connect_btn" />
</LinearLayout>
android:text="Logged in"
android:gravity="center"
android:textStyle="bold"
android:layout_marginBottom="8dp" />
<!-- Tab layout -->
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:tabMode="fixed" />
<!-- View pager for tab content -->

View File

@ -5,26 +5,23 @@
android:orientation="vertical"
android:padding="16dp">
<!-- Chat display -->
<TextSwitcher
android:id="@+id/chat_display"
<!-- Chat display with scroll view -->
<ScrollView
android:id="@+id/chat_scroll"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_weight="1">
<TextView
android:id="@+id/chat_display"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:padding="8dp">
android:padding="8dp"
android:textColor="@android:color/black"
android:textSize="14sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@android:color/black" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="@android:color/black" />
</TextSwitcher>
</ScrollView>
<!-- Message input -->
<LinearLayout

View File

@ -41,83 +41,77 @@ Daemon will be stopped at the end of the build
> Task :app:createDebugApkListingFileRedirect UP-TO-DATE
> Task :app:assembleDebug UP-TO-DATE
> Task :app:preReleaseBuild UP-TO-DATE
> Task :app:javaPreCompileRelease
> Task :app:generateReleaseResValues
> Task :app:mapReleaseSourceSetPaths
> Task :app:generateReleaseResources
> Task :app:checkReleaseAarMetadata
> Task :app:packageReleaseResources
> Task :app:createReleaseCompatibleScreenManifests
> Task :app:extractDeepLinksRelease
> Task :app:parseReleaseLocalResources
> Task :app:processReleaseMainManifest
> Task :app:mergeReleaseResources
> Task :app:processReleaseManifest
> Task :app:extractProguardFiles
> Task :app:mergeReleaseJniLibFolders
> Task :app:mergeReleaseNativeLibs
> Task :app:desugarReleaseFileDependencies
> Task :app:checkReleaseDuplicateClasses
> Task :app:stripReleaseDebugSymbols
Unable to strip the following libraries, packaging them as they are: libimage_processing_util_jni.so.
> Task :app:mergeReleaseArtProfile
> Task :app:extractReleaseNativeSymbolTables
> Task :app:mergeReleaseNativeDebugMetadata NO-SOURCE
> Task :app:mergeReleaseShaders
> Task :app:compileReleaseShaders NO-SOURCE
> Task :app:generateReleaseAssets UP-TO-DATE
> Task :app:mergeReleaseAssets
> Task :app:compressReleaseAssets
> Task :app:processReleaseJavaRes NO-SOURCE
> Task :app:collectReleaseDependencies
> Task :app:sdkReleaseDependencyData
> Task :app:writeReleaseAppMetadata
> Task :app:writeReleaseSigningConfigVersions
> Task :app:preDebugAndroidTestBuild SKIPPED
> Task :app:generateDebugAndroidTestResValues
> Task :app:preDebugUnitTestBuild UP-TO-DATE
> Task :app:processDebugUnitTestJavaRes NO-SOURCE
> Task :app:preReleaseUnitTestBuild UP-TO-DATE
> Task :app:javaPreCompileDebugUnitTest
> Task :app:javaPreCompileReleaseUnitTest
> Task :app:processReleaseUnitTestJavaRes NO-SOURCE
> Task :app:processReleaseManifestForPackage
> Task :app:bundleDebugClassesToCompileJar
> Task :app:bundleDebugClassesToRuntimeJar
> Task :app:mergeReleaseJavaResource
> Task :app:generateDebugLintReportModel
> Task :app:compileDebugUnitTestJavaWithJavac NO-SOURCE
> Task :app:testDebugUnitTest NO-SOURCE
> Task :app:processReleaseResources
> Task :app:compileReleaseJavaWithJavac
> Task :app:generateReleaseLintVitalReportModel
> Task :app:dexBuilderRelease
> Task :app:mergeReleaseGlobalSynthetics
> Task :app:bundleReleaseClassesToRuntimeJar
> Task :app:bundleReleaseClassesToCompileJar
> Task :app:compileReleaseUnitTestJavaWithJavac NO-SOURCE
> Task :app:testReleaseUnitTest NO-SOURCE
> Task :app:test UP-TO-DATE
> Task :app:optimizeReleaseResources
> Task :app:mergeExtDexRelease
> Task :app:mergeDexRelease
> Task :app:compileReleaseArtProfile
> Task :app:packageRelease
> Task :app:createReleaseApkListingFileRedirect
> Task :app:lintVitalAnalyzeRelease
> Task :app:javaPreCompileRelease UP-TO-DATE
> Task :app:checkReleaseAarMetadata UP-TO-DATE
> Task :app:generateReleaseResValues UP-TO-DATE
> Task :app:mapReleaseSourceSetPaths UP-TO-DATE
> Task :app:generateReleaseResources UP-TO-DATE
> Task :app:mergeReleaseResources UP-TO-DATE
> Task :app:packageReleaseResources UP-TO-DATE
> Task :app:parseReleaseLocalResources UP-TO-DATE
> Task :app:createReleaseCompatibleScreenManifests UP-TO-DATE
> Task :app:extractDeepLinksRelease UP-TO-DATE
> Task :app:processReleaseMainManifest UP-TO-DATE
> Task :app:processReleaseManifest UP-TO-DATE
> Task :app:processReleaseManifestForPackage UP-TO-DATE
> Task :app:processReleaseResources UP-TO-DATE
> Task :app:compileReleaseJavaWithJavac UP-TO-DATE
> Task :app:extractProguardFiles UP-TO-DATE
> Task :app:generateReleaseLintVitalReportModel UP-TO-DATE
> Task :app:lintVitalAnalyzeRelease UP-TO-DATE
> Task :app:lintVitalReportRelease SKIPPED
> Task :app:lintVitalRelease SKIPPED
> Task :app:assembleRelease
> Task :app:assemble
> Task :app:lintAnalyzeDebug
> Task :app:lintReportDebug
Wrote HTML report to file:///home/ganome/Projects/SCAR-719/repos/scar-chat/android_client/app/build/reports/lint-results-debug.html
> Task :app:mergeReleaseJniLibFolders UP-TO-DATE
> Task :app:mergeReleaseNativeLibs UP-TO-DATE
> Task :app:stripReleaseDebugSymbols UP-TO-DATE
> Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
> Task :app:mergeReleaseNativeDebugMetadata NO-SOURCE
> Task :app:checkReleaseDuplicateClasses UP-TO-DATE
> Task :app:dexBuilderRelease UP-TO-DATE
> Task :app:desugarReleaseFileDependencies UP-TO-DATE
> Task :app:mergeExtDexRelease UP-TO-DATE
> Task :app:mergeDexRelease UP-TO-DATE
> Task :app:mergeReleaseArtProfile UP-TO-DATE
> Task :app:mergeReleaseGlobalSynthetics UP-TO-DATE
> Task :app:compileReleaseArtProfile UP-TO-DATE
> Task :app:mergeReleaseShaders UP-TO-DATE
> Task :app:compileReleaseShaders NO-SOURCE
> Task :app:generateReleaseAssets UP-TO-DATE
> Task :app:mergeReleaseAssets UP-TO-DATE
> Task :app:compressReleaseAssets UP-TO-DATE
> Task :app:processReleaseJavaRes NO-SOURCE
> Task :app:mergeReleaseJavaResource UP-TO-DATE
> Task :app:optimizeReleaseResources UP-TO-DATE
> Task :app:collectReleaseDependencies UP-TO-DATE
> Task :app:sdkReleaseDependencyData UP-TO-DATE
> Task :app:writeReleaseAppMetadata UP-TO-DATE
> Task :app:writeReleaseSigningConfigVersions UP-TO-DATE
> Task :app:packageRelease UP-TO-DATE
> Task :app:createReleaseApkListingFileRedirect UP-TO-DATE
> Task :app:assembleRelease UP-TO-DATE
> Task :app:assemble UP-TO-DATE
> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE
> Task :app:preDebugAndroidTestBuild SKIPPED
> Task :app:generateDebugAndroidTestResValues UP-TO-DATE
> Task :app:generateDebugLintReportModel UP-TO-DATE
> Task :app:lintAnalyzeDebug UP-TO-DATE
> Task :app:lintReportDebug UP-TO-DATE
> Task :app:lintDebug
> Task :app:lint
> Task :app:bundleDebugClassesToRuntimeJar UP-TO-DATE
> Task :app:preDebugUnitTestBuild UP-TO-DATE
> Task :app:javaPreCompileDebugUnitTest UP-TO-DATE
> Task :app:compileDebugUnitTestJavaWithJavac NO-SOURCE
> Task :app:processDebugUnitTestJavaRes NO-SOURCE
> Task :app:testDebugUnitTest NO-SOURCE
> Task :app:bundleReleaseClassesToRuntimeJar UP-TO-DATE
> Task :app:bundleReleaseClassesToCompileJar UP-TO-DATE
> Task :app:preReleaseUnitTestBuild UP-TO-DATE
> Task :app:javaPreCompileReleaseUnitTest UP-TO-DATE
> Task :app:compileReleaseUnitTestJavaWithJavac NO-SOURCE
> Task :app:processReleaseUnitTestJavaRes NO-SOURCE
> Task :app:testReleaseUnitTest NO-SOURCE
> Task :app:test UP-TO-DATE
> Task :app:check
> Task :app:build
@ -129,5 +123,5 @@ You can use '--warning-mode all' to show the individual deprecation warnings and
For more on this, please refer to https://docs.gradle.org/8.14.2/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD SUCCESSFUL in 10s
83 actionable tasks: 51 executed, 32 up-to-date
BUILD SUCCESSFUL in 4s
83 actionable tasks: 1 executed, 82 up-to-date

View File

@ -0,0 +1,625 @@
chat_client_qt_autogen/timestamp: \
/home/ganome/Projects/SCAR-719/repos/scar-chat/CMakeLists.txt \
/home/ganome/Projects/SCAR-719/repos/scar-chat/build_qt/CMakeFiles/4.1.2/CMakeCXXCompiler.cmake \
/home/ganome/Projects/SCAR-719/repos/scar-chat/build_qt/CMakeFiles/4.1.2/CMakeSystem.cmake \
/home/ganome/Projects/SCAR-719/repos/scar-chat/build_qt/chat_client_qt_autogen/moc_predefs.h \
/home/ganome/Projects/SCAR-719/repos/scar-chat/src/qt_client/main.cpp \
/usr/include/alloca.h \
/usr/include/asm-generic/bitsperlong.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm-generic/int-ll64.h \
/usr/include/asm-generic/posix_types.h \
/usr/include/asm-generic/types.h \
/usr/include/asm/bitsperlong.h \
/usr/include/asm/errno.h \
/usr/include/asm/posix_types.h \
/usr/include/asm/posix_types_64.h \
/usr/include/asm/types.h \
/usr/include/asm/unistd.h \
/usr/include/asm/unistd_64.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/byteswap.h \
/usr/include/bits/confname.h \
/usr/include/bits/cpu-set.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/local_lim.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix1_lim.h \
/usr/include/bits/posix2_lim.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/sched.h \
/usr/include/bits/select.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdint-intn.h \
/usr/include/bits/stdio_lim.h \
/usr/include/bits/stdlib-float.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/syscall.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/timex.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__fpos64_t.h \
/usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/types/error_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/mbstate_t.h \
/usr/include/bits/types/sigset_t.h \
/usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/struct___jmp_buf_tag.h \
/usr/include/bits/types/struct_itimerspec.h \
/usr/include/bits/types/struct_sched_param.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_tm.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/types/wint_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/uintn-identity.h \
/usr/include/bits/uio_lim.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/waitflags.h \
/usr/include/bits/waitstatus.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/bits/xopen_lim.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/limits.h \
/usr/include/linux/errno.h \
/usr/include/linux/limits.h \
/usr/include/linux/posix_types.h \
/usr/include/linux/stddef.h \
/usr/include/linux/types.h \
/usr/include/locale.h \
/usr/include/pthread.h \
/usr/include/qt5/Gentoo/gentoo-qconfig.h \
/usr/include/qt5/QtCore/QFlags \
/usr/include/qt5/QtCore/QThread \
/usr/include/qt5/QtCore/QTimer \
/usr/include/qt5/QtCore/qabstractitemmodel.h \
/usr/include/qt5/QtCore/qalgorithms.h \
/usr/include/qt5/QtCore/qarraydata.h \
/usr/include/qt5/QtCore/qatomic.h \
/usr/include/qt5/QtCore/qatomic_cxx11.h \
/usr/include/qt5/QtCore/qbasicatomic.h \
/usr/include/qt5/QtCore/qbasictimer.h \
/usr/include/qt5/QtCore/qbytearray.h \
/usr/include/qt5/QtCore/qbytearraylist.h \
/usr/include/qt5/QtCore/qchar.h \
/usr/include/qt5/QtCore/qcompilerdetection.h \
/usr/include/qt5/QtCore/qconfig.h \
/usr/include/qt5/QtCore/qcontainerfwd.h \
/usr/include/qt5/QtCore/qcontainertools_impl.h \
/usr/include/qt5/QtCore/qcontiguouscache.h \
/usr/include/qt5/QtCore/qcoreapplication.h \
/usr/include/qt5/QtCore/qcoreevent.h \
/usr/include/qt5/QtCore/qcryptographichash.h \
/usr/include/qt5/QtCore/qdatastream.h \
/usr/include/qt5/QtCore/qdatetime.h \
/usr/include/qt5/QtCore/qdeadlinetimer.h \
/usr/include/qt5/QtCore/qdebug.h \
/usr/include/qt5/QtCore/qelapsedtimer.h \
/usr/include/qt5/QtCore/qeventloop.h \
/usr/include/qt5/QtCore/qflags.h \
/usr/include/qt5/QtCore/qgenericatomic.h \
/usr/include/qt5/QtCore/qglobal.h \
/usr/include/qt5/QtCore/qglobalstatic.h \
/usr/include/qt5/QtCore/qhash.h \
/usr/include/qt5/QtCore/qhashfunctions.h \
/usr/include/qt5/QtCore/qiodevice.h \
/usr/include/qt5/QtCore/qiterator.h \
/usr/include/qt5/QtCore/qline.h \
/usr/include/qt5/QtCore/qlist.h \
/usr/include/qt5/QtCore/qlocale.h \
/usr/include/qt5/QtCore/qlogging.h \
/usr/include/qt5/QtCore/qmap.h \
/usr/include/qt5/QtCore/qmargins.h \
/usr/include/qt5/QtCore/qmetaobject.h \
/usr/include/qt5/QtCore/qmetatype.h \
/usr/include/qt5/QtCore/qnamespace.h \
/usr/include/qt5/QtCore/qnumeric.h \
/usr/include/qt5/QtCore/qobject.h \
/usr/include/qt5/QtCore/qobject_impl.h \
/usr/include/qt5/QtCore/qobjectdefs.h \
/usr/include/qt5/QtCore/qobjectdefs_impl.h \
/usr/include/qt5/QtCore/qpair.h \
/usr/include/qt5/QtCore/qpoint.h \
/usr/include/qt5/QtCore/qprocessordetection.h \
/usr/include/qt5/QtCore/qrect.h \
/usr/include/qt5/QtCore/qrefcount.h \
/usr/include/qt5/QtCore/qregexp.h \
/usr/include/qt5/QtCore/qregularexpression.h \
/usr/include/qt5/QtCore/qscopedpointer.h \
/usr/include/qt5/QtCore/qset.h \
/usr/include/qt5/QtCore/qshareddata.h \
/usr/include/qt5/QtCore/qsharedpointer.h \
/usr/include/qt5/QtCore/qsharedpointer_impl.h \
/usr/include/qt5/QtCore/qsize.h \
/usr/include/qt5/QtCore/qstring.h \
/usr/include/qt5/QtCore/qstringalgorithms.h \
/usr/include/qt5/QtCore/qstringlist.h \
/usr/include/qt5/QtCore/qstringliteral.h \
/usr/include/qt5/QtCore/qstringmatcher.h \
/usr/include/qt5/QtCore/qstringview.h \
/usr/include/qt5/QtCore/qsysinfo.h \
/usr/include/qt5/QtCore/qsystemdetection.h \
/usr/include/qt5/QtCore/qtcore-config.h \
/usr/include/qt5/QtCore/qtextstream.h \
/usr/include/qt5/QtCore/qthread.h \
/usr/include/qt5/QtCore/qtimer.h \
/usr/include/qt5/QtCore/qtypeinfo.h \
/usr/include/qt5/QtCore/qurl.h \
/usr/include/qt5/QtCore/qvariant.h \
/usr/include/qt5/QtCore/qvarlengtharray.h \
/usr/include/qt5/QtCore/qvector.h \
/usr/include/qt5/QtCore/qversiontagging.h \
/usr/include/qt5/QtGui/QImage \
/usr/include/qt5/QtGui/QPixmap \
/usr/include/qt5/QtGui/qbrush.h \
/usr/include/qt5/QtGui/qcolor.h \
/usr/include/qt5/QtGui/qcursor.h \
/usr/include/qt5/QtGui/qfont.h \
/usr/include/qt5/QtGui/qfontinfo.h \
/usr/include/qt5/QtGui/qfontmetrics.h \
/usr/include/qt5/QtGui/qguiapplication.h \
/usr/include/qt5/QtGui/qicon.h \
/usr/include/qt5/QtGui/qimage.h \
/usr/include/qt5/QtGui/qinputmethod.h \
/usr/include/qt5/QtGui/qkeysequence.h \
/usr/include/qt5/QtGui/qmatrix.h \
/usr/include/qt5/QtGui/qpaintdevice.h \
/usr/include/qt5/QtGui/qpalette.h \
/usr/include/qt5/QtGui/qpen.h \
/usr/include/qt5/QtGui/qpixelformat.h \
/usr/include/qt5/QtGui/qpixmap.h \
/usr/include/qt5/QtGui/qpolygon.h \
/usr/include/qt5/QtGui/qregion.h \
/usr/include/qt5/QtGui/qrgb.h \
/usr/include/qt5/QtGui/qrgba64.h \
/usr/include/qt5/QtGui/qtextcursor.h \
/usr/include/qt5/QtGui/qtextdocument.h \
/usr/include/qt5/QtGui/qtextformat.h \
/usr/include/qt5/QtGui/qtextoption.h \
/usr/include/qt5/QtGui/qtgui-config.h \
/usr/include/qt5/QtGui/qtguiglobal.h \
/usr/include/qt5/QtGui/qtransform.h \
/usr/include/qt5/QtGui/qvalidator.h \
/usr/include/qt5/QtGui/qwindowdefs.h \
/usr/include/qt5/QtMultimedia/QCamera \
/usr/include/qt5/QtMultimedia/QCameraInfo \
/usr/include/qt5/QtMultimedia/qabstractvideobuffer.h \
/usr/include/qt5/QtMultimedia/qcamera.h \
/usr/include/qt5/QtMultimedia/qcameraexposure.h \
/usr/include/qt5/QtMultimedia/qcamerafocus.h \
/usr/include/qt5/QtMultimedia/qcameraimageprocessing.h \
/usr/include/qt5/QtMultimedia/qcamerainfo.h \
/usr/include/qt5/QtMultimedia/qcameraviewfindersettings.h \
/usr/include/qt5/QtMultimedia/qmediacontrol.h \
/usr/include/qt5/QtMultimedia/qmediaenumdebug.h \
/usr/include/qt5/QtMultimedia/qmediaobject.h \
/usr/include/qt5/QtMultimedia/qmediaservice.h \
/usr/include/qt5/QtMultimedia/qmultimedia.h \
/usr/include/qt5/QtMultimedia/qtmultimedia-config.h \
/usr/include/qt5/QtMultimedia/qtmultimediaglobal.h \
/usr/include/qt5/QtMultimedia/qvideoframe.h \
/usr/include/qt5/QtNetwork/QHostAddress \
/usr/include/qt5/QtNetwork/QSslSocket \
/usr/include/qt5/QtNetwork/qabstractsocket.h \
/usr/include/qt5/QtNetwork/qhostaddress.h \
/usr/include/qt5/QtNetwork/qssl.h \
/usr/include/qt5/QtNetwork/qsslcertificate.h \
/usr/include/qt5/QtNetwork/qsslerror.h \
/usr/include/qt5/QtNetwork/qsslsocket.h \
/usr/include/qt5/QtNetwork/qtcpsocket.h \
/usr/include/qt5/QtNetwork/qtnetwork-config.h \
/usr/include/qt5/QtNetwork/qtnetworkglobal.h \
/usr/include/qt5/QtWidgets/QApplication \
/usr/include/qt5/QtWidgets/QCheckBox \
/usr/include/qt5/QtWidgets/QColorDialog \
/usr/include/qt5/QtWidgets/QComboBox \
/usr/include/qt5/QtWidgets/QDialog \
/usr/include/qt5/QtWidgets/QGridLayout \
/usr/include/qt5/QtWidgets/QHBoxLayout \
/usr/include/qt5/QtWidgets/QLabel \
/usr/include/qt5/QtWidgets/QLineEdit \
/usr/include/qt5/QtWidgets/QMainWindow \
/usr/include/qt5/QtWidgets/QMessageBox \
/usr/include/qt5/QtWidgets/QPushButton \
/usr/include/qt5/QtWidgets/QScrollArea \
/usr/include/qt5/QtWidgets/QSlider \
/usr/include/qt5/QtWidgets/QSpinBox \
/usr/include/qt5/QtWidgets/QTabWidget \
/usr/include/qt5/QtWidgets/QTextEdit \
/usr/include/qt5/QtWidgets/QVBoxLayout \
/usr/include/qt5/QtWidgets/QWidget \
/usr/include/qt5/QtWidgets/qabstractbutton.h \
/usr/include/qt5/QtWidgets/qabstractitemdelegate.h \
/usr/include/qt5/QtWidgets/qabstractscrollarea.h \
/usr/include/qt5/QtWidgets/qabstractslider.h \
/usr/include/qt5/QtWidgets/qabstractspinbox.h \
/usr/include/qt5/QtWidgets/qapplication.h \
/usr/include/qt5/QtWidgets/qboxlayout.h \
/usr/include/qt5/QtWidgets/qcheckbox.h \
/usr/include/qt5/QtWidgets/qcolordialog.h \
/usr/include/qt5/QtWidgets/qcombobox.h \
/usr/include/qt5/QtWidgets/qdialog.h \
/usr/include/qt5/QtWidgets/qframe.h \
/usr/include/qt5/QtWidgets/qgridlayout.h \
/usr/include/qt5/QtWidgets/qlabel.h \
/usr/include/qt5/QtWidgets/qlayout.h \
/usr/include/qt5/QtWidgets/qlayoutitem.h \
/usr/include/qt5/QtWidgets/qlineedit.h \
/usr/include/qt5/QtWidgets/qmainwindow.h \
/usr/include/qt5/QtWidgets/qmessagebox.h \
/usr/include/qt5/QtWidgets/qpushbutton.h \
/usr/include/qt5/QtWidgets/qrubberband.h \
/usr/include/qt5/QtWidgets/qscrollarea.h \
/usr/include/qt5/QtWidgets/qsizepolicy.h \
/usr/include/qt5/QtWidgets/qslider.h \
/usr/include/qt5/QtWidgets/qspinbox.h \
/usr/include/qt5/QtWidgets/qstyle.h \
/usr/include/qt5/QtWidgets/qstyleoption.h \
/usr/include/qt5/QtWidgets/qtabbar.h \
/usr/include/qt5/QtWidgets/qtabwidget.h \
/usr/include/qt5/QtWidgets/qtextedit.h \
/usr/include/qt5/QtWidgets/qtwidgets-config.h \
/usr/include/qt5/QtWidgets/qtwidgetsglobal.h \
/usr/include/qt5/QtWidgets/qwidget.h \
/usr/include/sched.h \
/usr/include/stdc-predef.h \
/usr/include/stdio.h \
/usr/include/stdlib.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/select.h \
/usr/include/sys/syscall.h \
/usr/include/sys/types.h \
/usr/include/syscall.h \
/usr/include/time.h \
/usr/include/unistd.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/algorithm \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/array \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/atomic \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/backward/auto_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/backward/binders.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bit \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/algorithmfwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/align.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/alloc_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/allocated_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/allocator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/atomic_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/atomic_lockfree_defines.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/atomic_wait.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/basic_ios.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/basic_ios.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/basic_string.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/basic_string.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/c++0x_warning.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/char_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/charconv.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/concept_check.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/cpp_type_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/cxxabi_forced.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/cxxabi_init_exception.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/erase_if.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/exception.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/exception_defines.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/exception_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/formatfwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/functexcept.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/functional_hash.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/hash_bytes.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ios_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/istream.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/iterator_concepts.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/list.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/locale_classes.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/locale_classes.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/locale_facets.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/locale_facets.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/localefwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/max_size_type.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/memory_resource.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/memoryfwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/mofunc_impl.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/monostate.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/move.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/move_only_function.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/nested_exception.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/new_allocator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/node_handle.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ostream.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ostream.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ostream_insert.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/out_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/postypes.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/predefined_ops.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ptr_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/range_access.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_algo.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_algobase.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_cmp.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_uninitialized.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_util.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/refwrap.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/requires_hosted.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/sat_arith.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_atomic.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_abs.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_mutex.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_algo.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_algobase.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_bvector.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_construct.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_function.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_heap.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_iterator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_iterator_base_funcs.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_iterator_base_types.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_list.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_map.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_multimap.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_numeric.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_pair.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_raw_storage_iter.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_relops.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_tempbuf.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_tree.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_uninitialized.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_vector.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stream_iterator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/streambuf.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/streambuf_iterator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/string_view.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stringfwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/uniform_int_dist.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/unique_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/uses_allocator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/uses_allocator_args.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/utility.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/vector.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/version.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cctype \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cerrno \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/charconv \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/climits \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/clocale \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/compare \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/concepts \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cstddef \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cstdint \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cstdlib \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cwchar \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cwctype \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/debug/assertions.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/debug/debug.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/exception \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/aligned_buffer.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/alloc_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/atomicity.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/concurrence.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/numeric_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/string_conversions.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/type_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/format \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/functional \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/future \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/initializer_list \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ios \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/iosfwd \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/iostream \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/istream \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/iterator \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/limits \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/list \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/map \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/memory \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/mutex \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/new \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/numbers \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/numeric \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/optional \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ostream \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/pstl/execution_defs.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/pstl/glue_numeric_defs.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/stdexcept \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/streambuf \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/string \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/string_view \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/text_encoding \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/tuple \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/type_traits \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/typeinfo \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/unordered_map \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/utility \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/vector \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/atomic_word.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/c++allocator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/c++locale.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/ctype_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/ctype_inline.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/error_constants.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/gthr-default.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/gthr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/stdarg.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/stddef.h \
/usr/lib64/cmake/Qt5/Qt5Config.cmake \
/usr/lib64/cmake/Qt5/Qt5ConfigVersion.cmake \
/usr/lib64/cmake/Qt5/Qt5ModuleLocation.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfig.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfigExtras.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfigExtrasMkspecDir.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfigVersion.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreMacros.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5GuiConfig.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5GuiConfigVersion.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QComposePlatformInputContextPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QGifPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QGtk3ThemePlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QICOPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QJpegPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QLibInputPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QMinimalIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QOffscreenIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QSvgIconPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QSvgPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QWaylandEglPlatformIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QWaylandIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXcbEglIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXcbGlxIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXcbIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXdgDesktopPortalThemePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5MultimediaConfig.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5MultimediaConfigVersion.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_CameraBinServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QAlsaPlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QGstreamerAudioDecoderServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QGstreamerCaptureServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QGstreamerPlayerServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QM3uPlaylistPlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QPulseAudioPlugin.cmake \
/usr/lib64/cmake/Qt5Network/Qt5NetworkConfig.cmake \
/usr/lib64/cmake/Qt5Network/Qt5NetworkConfigVersion.cmake \
/usr/lib64/cmake/Qt5Network/Qt5Network_QGenericEnginePlugin.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsConfigExtras.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsConfigVersion.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsMacros.cmake \
/usr/share/cmake/Modules/CMakeCXXCompiler.cmake.in \
/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp \
/usr/share/cmake/Modules/CMakeCXXInformation.cmake \
/usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake \
/usr/share/cmake/Modules/CMakeCompilerIdDetection.cmake \
/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompiler.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompilerSupport.cmake \
/usr/share/cmake/Modules/CMakeDetermineSystem.cmake \
/usr/share/cmake/Modules/CMakeFindBinUtils.cmake \
/usr/share/cmake/Modules/CMakeGenericSystem.cmake \
/usr/share/cmake/Modules/CMakeInitializeConfigs.cmake \
/usr/share/cmake/Modules/CMakeLanguageInformation.cmake \
/usr/share/cmake/Modules/CMakeParseArguments.cmake \
/usr/share/cmake/Modules/CMakeParseImplicitIncludeInfo.cmake \
/usr/share/cmake/Modules/CMakeParseImplicitLinkInfo.cmake \
/usr/share/cmake/Modules/CMakeParseLibraryArchitecture.cmake \
/usr/share/cmake/Modules/CMakeSystem.cmake.in \
/usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake \
/usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake \
/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake \
/usr/share/cmake/Modules/CMakeTestCompilerCommon.cmake \
/usr/share/cmake/Modules/CMakeUnixFindMake.cmake \
/usr/share/cmake/Modules/Compiler/ADSP-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/ARMCC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/ARMClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/AppleClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Borland-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake \
/usr/share/cmake/Modules/Compiler/Clang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Clang-DetermineCompilerInternal.cmake \
/usr/share/cmake/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Cray-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/CrayClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Diab-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Embarcadero-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Fujitsu-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/GHS-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/GNU-CXX.cmake \
/usr/share/cmake/Modules/Compiler/GNU-FindBinUtils.cmake \
/usr/share/cmake/Modules/Compiler/GNU.cmake \
/usr/share/cmake/Modules/Compiler/HP-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/IAR-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake \
/usr/share/cmake/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Intel-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/MSVC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/NVHPC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/NVIDIA-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/OrangeC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/PGI-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/PathScale-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Renesas-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/SCO-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/TI-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/TIClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Tasking-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Watcom-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/XL-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/FindOpenSSL.cmake \
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake \
/usr/share/cmake/Modules/FindPackageMessage.cmake \
/usr/share/cmake/Modules/FindPkgConfig.cmake \
/usr/share/cmake/Modules/FindSQLite3.cmake \
/usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake \
/usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake \
/usr/share/cmake/Modules/Internal/CMakeDetermineLinkerId.cmake \
/usr/share/cmake/Modules/Internal/CMakeInspectCXXLinker.cmake \
/usr/share/cmake/Modules/Internal/FeatureTesting.cmake \
/usr/share/cmake/Modules/Linker/GNU-CXX.cmake \
/usr/share/cmake/Modules/Linker/GNU.cmake \
/usr/share/cmake/Modules/Platform/Linker/GNU.cmake \
/usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake \
/usr/share/cmake/Modules/Platform/Linux-Determine-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linux-GNU.cmake \
/usr/share/cmake/Modules/Platform/Linux-Initialize.cmake \
/usr/share/cmake/Modules/Platform/Linux.cmake \
/usr/share/cmake/Modules/Platform/UnixPaths.cmake \
/usr/bin/cmake

View File

@ -0,0 +1,355 @@
/****************************************************************************
** Meta object code from reading C++ file 'main.cpp'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.18)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include <memory>
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#include <QtCore/QList>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'main.cpp' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.15.18. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_VideoFeedWidget_t {
QByteArrayData data[1];
char stringdata0[16];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_VideoFeedWidget_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_VideoFeedWidget_t qt_meta_stringdata_VideoFeedWidget = {
{
QT_MOC_LITERAL(0, 0, 15) // "VideoFeedWidget"
},
"VideoFeedWidget"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_VideoFeedWidget[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
0 // eod
};
void VideoFeedWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
(void)_o;
(void)_id;
(void)_c;
(void)_a;
}
QT_INIT_METAOBJECT const QMetaObject VideoFeedWidget::staticMetaObject = { {
QMetaObject::SuperData::link<QWidget::staticMetaObject>(),
qt_meta_stringdata_VideoFeedWidget.data,
qt_meta_data_VideoFeedWidget,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *VideoFeedWidget::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *VideoFeedWidget::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_VideoFeedWidget.stringdata0))
return static_cast<void*>(this);
return QWidget::qt_metacast(_clname);
}
int VideoFeedWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QWidget::qt_metacall(_c, _id, _a);
return _id;
}
struct qt_meta_stringdata_LoginDialog_t {
QByteArrayData data[1];
char stringdata0[12];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_LoginDialog_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_LoginDialog_t qt_meta_stringdata_LoginDialog = {
{
QT_MOC_LITERAL(0, 0, 11) // "LoginDialog"
},
"LoginDialog"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_LoginDialog[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
0 // eod
};
void LoginDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
(void)_o;
(void)_id;
(void)_c;
(void)_a;
}
QT_INIT_METAOBJECT const QMetaObject LoginDialog::staticMetaObject = { {
QMetaObject::SuperData::link<QDialog::staticMetaObject>(),
qt_meta_stringdata_LoginDialog.data,
qt_meta_data_LoginDialog,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *LoginDialog::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *LoginDialog::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_LoginDialog.stringdata0))
return static_cast<void*>(this);
return QDialog::qt_metacast(_clname);
}
int LoginDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QDialog::qt_metacall(_c, _id, _a);
return _id;
}
struct qt_meta_stringdata_ChatClient_t {
QByteArrayData data[27];
char stringdata0[377];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_ChatClient_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_ChatClient_t qt_meta_stringdata_ChatClient = {
{
QT_MOC_LITERAL(0, 0, 10), // "ChatClient"
QT_MOC_LITERAL(1, 11, 17), // "show_login_dialog"
QT_MOC_LITERAL(2, 29, 0), // ""
QT_MOC_LITERAL(3, 30, 16), // "populate_cameras"
QT_MOC_LITERAL(4, 47, 17), // "on_camera_changed"
QT_MOC_LITERAL(5, 65, 5), // "index"
QT_MOC_LITERAL(6, 71, 16), // "on_camera_toggle"
QT_MOC_LITERAL(7, 88, 5), // "state"
QT_MOC_LITERAL(8, 94, 12), // "start_camera"
QT_MOC_LITERAL(9, 107, 11), // "stop_camera"
QT_MOC_LITERAL(10, 119, 19), // "on_socket_connected"
QT_MOC_LITERAL(11, 139, 22), // "on_socket_disconnected"
QT_MOC_LITERAL(12, 162, 14), // "on_socket_read"
QT_MOC_LITERAL(13, 177, 15), // "on_socket_error"
QT_MOC_LITERAL(14, 193, 28), // "QAbstractSocket::SocketError"
QT_MOC_LITERAL(15, 222, 5), // "error"
QT_MOC_LITERAL(16, 228, 13), // "on_ssl_errors"
QT_MOC_LITERAL(17, 242, 16), // "QList<QSslError>"
QT_MOC_LITERAL(18, 259, 6), // "errors"
QT_MOC_LITERAL(19, 266, 15), // "on_send_message"
QT_MOC_LITERAL(20, 282, 11), // "on_bg_color"
QT_MOC_LITERAL(21, 294, 13), // "on_text_color"
QT_MOC_LITERAL(22, 308, 23), // "on_transparency_changed"
QT_MOC_LITERAL(23, 332, 5), // "value"
QT_MOC_LITERAL(24, 338, 15), // "add_remote_user"
QT_MOC_LITERAL(25, 354, 8), // "username"
QT_MOC_LITERAL(26, 363, 13) // "camera_active"
},
"ChatClient\0show_login_dialog\0\0"
"populate_cameras\0on_camera_changed\0"
"index\0on_camera_toggle\0state\0start_camera\0"
"stop_camera\0on_socket_connected\0"
"on_socket_disconnected\0on_socket_read\0"
"on_socket_error\0QAbstractSocket::SocketError\0"
"error\0on_ssl_errors\0QList<QSslError>\0"
"errors\0on_send_message\0on_bg_color\0"
"on_text_color\0on_transparency_changed\0"
"value\0add_remote_user\0username\0"
"camera_active"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_ChatClient[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
16, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
// slots: name, argc, parameters, tag, flags
1, 0, 94, 2, 0x08 /* Private */,
3, 0, 95, 2, 0x08 /* Private */,
4, 1, 96, 2, 0x08 /* Private */,
6, 1, 99, 2, 0x08 /* Private */,
8, 0, 102, 2, 0x08 /* Private */,
9, 0, 103, 2, 0x08 /* Private */,
10, 0, 104, 2, 0x08 /* Private */,
11, 0, 105, 2, 0x08 /* Private */,
12, 0, 106, 2, 0x08 /* Private */,
13, 1, 107, 2, 0x08 /* Private */,
16, 1, 110, 2, 0x08 /* Private */,
19, 0, 113, 2, 0x08 /* Private */,
20, 0, 114, 2, 0x08 /* Private */,
21, 0, 115, 2, 0x08 /* Private */,
22, 1, 116, 2, 0x08 /* Private */,
24, 2, 119, 2, 0x08 /* Private */,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void, QMetaType::Int, 5,
QMetaType::Void, QMetaType::Int, 7,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void, 0x80000000 | 14, 15,
QMetaType::Void, 0x80000000 | 17, 18,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void, QMetaType::Int, 23,
QMetaType::Void, QMetaType::QString, QMetaType::Bool, 25, 26,
0 // eod
};
void ChatClient::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<ChatClient *>(_o);
(void)_t;
switch (_id) {
case 0: _t->show_login_dialog(); break;
case 1: _t->populate_cameras(); break;
case 2: _t->on_camera_changed((*reinterpret_cast< int(*)>(_a[1]))); break;
case 3: _t->on_camera_toggle((*reinterpret_cast< int(*)>(_a[1]))); break;
case 4: _t->start_camera(); break;
case 5: _t->stop_camera(); break;
case 6: _t->on_socket_connected(); break;
case 7: _t->on_socket_disconnected(); break;
case 8: _t->on_socket_read(); break;
case 9: _t->on_socket_error((*reinterpret_cast< QAbstractSocket::SocketError(*)>(_a[1]))); break;
case 10: _t->on_ssl_errors((*reinterpret_cast< const QList<QSslError>(*)>(_a[1]))); break;
case 11: _t->on_send_message(); break;
case 12: _t->on_bg_color(); break;
case 13: _t->on_text_color(); break;
case 14: _t->on_transparency_changed((*reinterpret_cast< int(*)>(_a[1]))); break;
case 15: _t->add_remote_user((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< bool(*)>(_a[2]))); break;
default: ;
}
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
switch (_id) {
default: *reinterpret_cast<int*>(_a[0]) = -1; break;
case 9:
switch (*reinterpret_cast<int*>(_a[1])) {
default: *reinterpret_cast<int*>(_a[0]) = -1; break;
case 0:
*reinterpret_cast<int*>(_a[0]) = qRegisterMetaType< QAbstractSocket::SocketError >(); break;
}
break;
case 10:
switch (*reinterpret_cast<int*>(_a[1])) {
default: *reinterpret_cast<int*>(_a[0]) = -1; break;
case 0:
*reinterpret_cast<int*>(_a[0]) = qRegisterMetaType< QList<QSslError> >(); break;
}
break;
}
}
}
QT_INIT_METAOBJECT const QMetaObject ChatClient::staticMetaObject = { {
QMetaObject::SuperData::link<QMainWindow::staticMetaObject>(),
qt_meta_stringdata_ChatClient.data,
qt_meta_data_ChatClient,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *ChatClient::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *ChatClient::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_ChatClient.stringdata0))
return static_cast<void*>(this);
return QMainWindow::qt_metacast(_clname);
}
int ChatClient::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QMainWindow::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 16)
qt_static_metacall(this, _c, _id, _a);
_id -= 16;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 16)
qt_static_metacall(this, _c, _id, _a);
_id -= 16;
}
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE

View File

@ -0,0 +1,486 @@
/home/ganome/Projects/SCAR-719/repos/scar-chat/build_qt/chat_client_qt_autogen/include/main.moc: /home/ganome/Projects/SCAR-719/repos/scar-chat/src/qt_client/main.cpp \
/home/ganome/Projects/SCAR-719/repos/scar-chat/build_qt/chat_client_qt_autogen/moc_predefs.h \
/usr/include/alloca.h \
/usr/include/asm-generic/bitsperlong.h \
/usr/include/asm-generic/errno-base.h \
/usr/include/asm-generic/errno.h \
/usr/include/asm-generic/int-ll64.h \
/usr/include/asm-generic/posix_types.h \
/usr/include/asm-generic/types.h \
/usr/include/asm/bitsperlong.h \
/usr/include/asm/errno.h \
/usr/include/asm/posix_types.h \
/usr/include/asm/posix_types_64.h \
/usr/include/asm/types.h \
/usr/include/asm/unistd.h \
/usr/include/asm/unistd_64.h \
/usr/include/assert.h \
/usr/include/bits/atomic_wide_counter.h \
/usr/include/bits/byteswap.h \
/usr/include/bits/confname.h \
/usr/include/bits/cpu-set.h \
/usr/include/bits/endian.h \
/usr/include/bits/endianness.h \
/usr/include/bits/environments.h \
/usr/include/bits/errno.h \
/usr/include/bits/floatn-common.h \
/usr/include/bits/floatn.h \
/usr/include/bits/getopt_core.h \
/usr/include/bits/getopt_posix.h \
/usr/include/bits/libc-header-start.h \
/usr/include/bits/local_lim.h \
/usr/include/bits/locale.h \
/usr/include/bits/long-double.h \
/usr/include/bits/posix1_lim.h \
/usr/include/bits/posix2_lim.h \
/usr/include/bits/posix_opt.h \
/usr/include/bits/pthread_stack_min-dynamic.h \
/usr/include/bits/pthreadtypes-arch.h \
/usr/include/bits/pthreadtypes.h \
/usr/include/bits/sched.h \
/usr/include/bits/select.h \
/usr/include/bits/setjmp.h \
/usr/include/bits/stdint-intn.h \
/usr/include/bits/stdio_lim.h \
/usr/include/bits/stdlib-float.h \
/usr/include/bits/struct_mutex.h \
/usr/include/bits/struct_rwlock.h \
/usr/include/bits/syscall.h \
/usr/include/bits/thread-shared-types.h \
/usr/include/bits/time.h \
/usr/include/bits/time64.h \
/usr/include/bits/timesize.h \
/usr/include/bits/timex.h \
/usr/include/bits/types.h \
/usr/include/bits/types/FILE.h \
/usr/include/bits/types/__FILE.h \
/usr/include/bits/types/__fpos64_t.h \
/usr/include/bits/types/__fpos_t.h \
/usr/include/bits/types/__locale_t.h \
/usr/include/bits/types/__mbstate_t.h \
/usr/include/bits/types/__sigset_t.h \
/usr/include/bits/types/clock_t.h \
/usr/include/bits/types/clockid_t.h \
/usr/include/bits/types/cookie_io_functions_t.h \
/usr/include/bits/types/error_t.h \
/usr/include/bits/types/locale_t.h \
/usr/include/bits/types/mbstate_t.h \
/usr/include/bits/types/sigset_t.h \
/usr/include/bits/types/struct_FILE.h \
/usr/include/bits/types/struct___jmp_buf_tag.h \
/usr/include/bits/types/struct_itimerspec.h \
/usr/include/bits/types/struct_sched_param.h \
/usr/include/bits/types/struct_timespec.h \
/usr/include/bits/types/struct_timeval.h \
/usr/include/bits/types/struct_tm.h \
/usr/include/bits/types/time_t.h \
/usr/include/bits/types/timer_t.h \
/usr/include/bits/types/wint_t.h \
/usr/include/bits/typesizes.h \
/usr/include/bits/uintn-identity.h \
/usr/include/bits/uio_lim.h \
/usr/include/bits/unistd_ext.h \
/usr/include/bits/waitflags.h \
/usr/include/bits/waitstatus.h \
/usr/include/bits/wchar.h \
/usr/include/bits/wctype-wchar.h \
/usr/include/bits/wordsize.h \
/usr/include/bits/xopen_lim.h \
/usr/include/ctype.h \
/usr/include/endian.h \
/usr/include/errno.h \
/usr/include/features-time64.h \
/usr/include/features.h \
/usr/include/gnu/stubs-64.h \
/usr/include/gnu/stubs.h \
/usr/include/limits.h \
/usr/include/linux/errno.h \
/usr/include/linux/limits.h \
/usr/include/linux/posix_types.h \
/usr/include/linux/stddef.h \
/usr/include/linux/types.h \
/usr/include/locale.h \
/usr/include/pthread.h \
/usr/include/qt5/Gentoo/gentoo-qconfig.h \
/usr/include/qt5/QtCore/QFlags \
/usr/include/qt5/QtCore/QThread \
/usr/include/qt5/QtCore/QTimer \
/usr/include/qt5/QtCore/qabstractitemmodel.h \
/usr/include/qt5/QtCore/qalgorithms.h \
/usr/include/qt5/QtCore/qarraydata.h \
/usr/include/qt5/QtCore/qatomic.h \
/usr/include/qt5/QtCore/qatomic_cxx11.h \
/usr/include/qt5/QtCore/qbasicatomic.h \
/usr/include/qt5/QtCore/qbasictimer.h \
/usr/include/qt5/QtCore/qbytearray.h \
/usr/include/qt5/QtCore/qbytearraylist.h \
/usr/include/qt5/QtCore/qchar.h \
/usr/include/qt5/QtCore/qcompilerdetection.h \
/usr/include/qt5/QtCore/qconfig.h \
/usr/include/qt5/QtCore/qcontainerfwd.h \
/usr/include/qt5/QtCore/qcontainertools_impl.h \
/usr/include/qt5/QtCore/qcontiguouscache.h \
/usr/include/qt5/QtCore/qcoreapplication.h \
/usr/include/qt5/QtCore/qcoreevent.h \
/usr/include/qt5/QtCore/qcryptographichash.h \
/usr/include/qt5/QtCore/qdatastream.h \
/usr/include/qt5/QtCore/qdatetime.h \
/usr/include/qt5/QtCore/qdeadlinetimer.h \
/usr/include/qt5/QtCore/qdebug.h \
/usr/include/qt5/QtCore/qelapsedtimer.h \
/usr/include/qt5/QtCore/qeventloop.h \
/usr/include/qt5/QtCore/qflags.h \
/usr/include/qt5/QtCore/qgenericatomic.h \
/usr/include/qt5/QtCore/qglobal.h \
/usr/include/qt5/QtCore/qglobalstatic.h \
/usr/include/qt5/QtCore/qhash.h \
/usr/include/qt5/QtCore/qhashfunctions.h \
/usr/include/qt5/QtCore/qiodevice.h \
/usr/include/qt5/QtCore/qiterator.h \
/usr/include/qt5/QtCore/qline.h \
/usr/include/qt5/QtCore/qlist.h \
/usr/include/qt5/QtCore/qlocale.h \
/usr/include/qt5/QtCore/qlogging.h \
/usr/include/qt5/QtCore/qmap.h \
/usr/include/qt5/QtCore/qmargins.h \
/usr/include/qt5/QtCore/qmetaobject.h \
/usr/include/qt5/QtCore/qmetatype.h \
/usr/include/qt5/QtCore/qnamespace.h \
/usr/include/qt5/QtCore/qnumeric.h \
/usr/include/qt5/QtCore/qobject.h \
/usr/include/qt5/QtCore/qobject_impl.h \
/usr/include/qt5/QtCore/qobjectdefs.h \
/usr/include/qt5/QtCore/qobjectdefs_impl.h \
/usr/include/qt5/QtCore/qpair.h \
/usr/include/qt5/QtCore/qpoint.h \
/usr/include/qt5/QtCore/qprocessordetection.h \
/usr/include/qt5/QtCore/qrect.h \
/usr/include/qt5/QtCore/qrefcount.h \
/usr/include/qt5/QtCore/qregexp.h \
/usr/include/qt5/QtCore/qregularexpression.h \
/usr/include/qt5/QtCore/qscopedpointer.h \
/usr/include/qt5/QtCore/qset.h \
/usr/include/qt5/QtCore/qshareddata.h \
/usr/include/qt5/QtCore/qsharedpointer.h \
/usr/include/qt5/QtCore/qsharedpointer_impl.h \
/usr/include/qt5/QtCore/qsize.h \
/usr/include/qt5/QtCore/qstring.h \
/usr/include/qt5/QtCore/qstringalgorithms.h \
/usr/include/qt5/QtCore/qstringlist.h \
/usr/include/qt5/QtCore/qstringliteral.h \
/usr/include/qt5/QtCore/qstringmatcher.h \
/usr/include/qt5/QtCore/qstringview.h \
/usr/include/qt5/QtCore/qsysinfo.h \
/usr/include/qt5/QtCore/qsystemdetection.h \
/usr/include/qt5/QtCore/qtcore-config.h \
/usr/include/qt5/QtCore/qtextstream.h \
/usr/include/qt5/QtCore/qthread.h \
/usr/include/qt5/QtCore/qtimer.h \
/usr/include/qt5/QtCore/qtypeinfo.h \
/usr/include/qt5/QtCore/qurl.h \
/usr/include/qt5/QtCore/qvariant.h \
/usr/include/qt5/QtCore/qvarlengtharray.h \
/usr/include/qt5/QtCore/qvector.h \
/usr/include/qt5/QtCore/qversiontagging.h \
/usr/include/qt5/QtGui/QImage \
/usr/include/qt5/QtGui/QPixmap \
/usr/include/qt5/QtGui/qbrush.h \
/usr/include/qt5/QtGui/qcolor.h \
/usr/include/qt5/QtGui/qcursor.h \
/usr/include/qt5/QtGui/qfont.h \
/usr/include/qt5/QtGui/qfontinfo.h \
/usr/include/qt5/QtGui/qfontmetrics.h \
/usr/include/qt5/QtGui/qguiapplication.h \
/usr/include/qt5/QtGui/qicon.h \
/usr/include/qt5/QtGui/qimage.h \
/usr/include/qt5/QtGui/qinputmethod.h \
/usr/include/qt5/QtGui/qkeysequence.h \
/usr/include/qt5/QtGui/qmatrix.h \
/usr/include/qt5/QtGui/qpaintdevice.h \
/usr/include/qt5/QtGui/qpalette.h \
/usr/include/qt5/QtGui/qpen.h \
/usr/include/qt5/QtGui/qpixelformat.h \
/usr/include/qt5/QtGui/qpixmap.h \
/usr/include/qt5/QtGui/qpolygon.h \
/usr/include/qt5/QtGui/qregion.h \
/usr/include/qt5/QtGui/qrgb.h \
/usr/include/qt5/QtGui/qrgba64.h \
/usr/include/qt5/QtGui/qtextcursor.h \
/usr/include/qt5/QtGui/qtextdocument.h \
/usr/include/qt5/QtGui/qtextformat.h \
/usr/include/qt5/QtGui/qtextoption.h \
/usr/include/qt5/QtGui/qtgui-config.h \
/usr/include/qt5/QtGui/qtguiglobal.h \
/usr/include/qt5/QtGui/qtransform.h \
/usr/include/qt5/QtGui/qvalidator.h \
/usr/include/qt5/QtGui/qwindowdefs.h \
/usr/include/qt5/QtMultimedia/QCamera \
/usr/include/qt5/QtMultimedia/QCameraInfo \
/usr/include/qt5/QtMultimedia/qabstractvideobuffer.h \
/usr/include/qt5/QtMultimedia/qcamera.h \
/usr/include/qt5/QtMultimedia/qcameraexposure.h \
/usr/include/qt5/QtMultimedia/qcamerafocus.h \
/usr/include/qt5/QtMultimedia/qcameraimageprocessing.h \
/usr/include/qt5/QtMultimedia/qcamerainfo.h \
/usr/include/qt5/QtMultimedia/qcameraviewfindersettings.h \
/usr/include/qt5/QtMultimedia/qmediacontrol.h \
/usr/include/qt5/QtMultimedia/qmediaenumdebug.h \
/usr/include/qt5/QtMultimedia/qmediaobject.h \
/usr/include/qt5/QtMultimedia/qmediaservice.h \
/usr/include/qt5/QtMultimedia/qmultimedia.h \
/usr/include/qt5/QtMultimedia/qtmultimedia-config.h \
/usr/include/qt5/QtMultimedia/qtmultimediaglobal.h \
/usr/include/qt5/QtMultimedia/qvideoframe.h \
/usr/include/qt5/QtNetwork/QHostAddress \
/usr/include/qt5/QtNetwork/QSslSocket \
/usr/include/qt5/QtNetwork/qabstractsocket.h \
/usr/include/qt5/QtNetwork/qhostaddress.h \
/usr/include/qt5/QtNetwork/qssl.h \
/usr/include/qt5/QtNetwork/qsslcertificate.h \
/usr/include/qt5/QtNetwork/qsslerror.h \
/usr/include/qt5/QtNetwork/qsslsocket.h \
/usr/include/qt5/QtNetwork/qtcpsocket.h \
/usr/include/qt5/QtNetwork/qtnetwork-config.h \
/usr/include/qt5/QtNetwork/qtnetworkglobal.h \
/usr/include/qt5/QtWidgets/QApplication \
/usr/include/qt5/QtWidgets/QCheckBox \
/usr/include/qt5/QtWidgets/QColorDialog \
/usr/include/qt5/QtWidgets/QComboBox \
/usr/include/qt5/QtWidgets/QDialog \
/usr/include/qt5/QtWidgets/QGridLayout \
/usr/include/qt5/QtWidgets/QHBoxLayout \
/usr/include/qt5/QtWidgets/QLabel \
/usr/include/qt5/QtWidgets/QLineEdit \
/usr/include/qt5/QtWidgets/QMainWindow \
/usr/include/qt5/QtWidgets/QMessageBox \
/usr/include/qt5/QtWidgets/QPushButton \
/usr/include/qt5/QtWidgets/QScrollArea \
/usr/include/qt5/QtWidgets/QSlider \
/usr/include/qt5/QtWidgets/QSpinBox \
/usr/include/qt5/QtWidgets/QTabWidget \
/usr/include/qt5/QtWidgets/QTextEdit \
/usr/include/qt5/QtWidgets/QVBoxLayout \
/usr/include/qt5/QtWidgets/QWidget \
/usr/include/qt5/QtWidgets/qabstractbutton.h \
/usr/include/qt5/QtWidgets/qabstractitemdelegate.h \
/usr/include/qt5/QtWidgets/qabstractscrollarea.h \
/usr/include/qt5/QtWidgets/qabstractslider.h \
/usr/include/qt5/QtWidgets/qabstractspinbox.h \
/usr/include/qt5/QtWidgets/qapplication.h \
/usr/include/qt5/QtWidgets/qboxlayout.h \
/usr/include/qt5/QtWidgets/qcheckbox.h \
/usr/include/qt5/QtWidgets/qcolordialog.h \
/usr/include/qt5/QtWidgets/qcombobox.h \
/usr/include/qt5/QtWidgets/qdialog.h \
/usr/include/qt5/QtWidgets/qframe.h \
/usr/include/qt5/QtWidgets/qgridlayout.h \
/usr/include/qt5/QtWidgets/qlabel.h \
/usr/include/qt5/QtWidgets/qlayout.h \
/usr/include/qt5/QtWidgets/qlayoutitem.h \
/usr/include/qt5/QtWidgets/qlineedit.h \
/usr/include/qt5/QtWidgets/qmainwindow.h \
/usr/include/qt5/QtWidgets/qmessagebox.h \
/usr/include/qt5/QtWidgets/qpushbutton.h \
/usr/include/qt5/QtWidgets/qrubberband.h \
/usr/include/qt5/QtWidgets/qscrollarea.h \
/usr/include/qt5/QtWidgets/qsizepolicy.h \
/usr/include/qt5/QtWidgets/qslider.h \
/usr/include/qt5/QtWidgets/qspinbox.h \
/usr/include/qt5/QtWidgets/qstyle.h \
/usr/include/qt5/QtWidgets/qstyleoption.h \
/usr/include/qt5/QtWidgets/qtabbar.h \
/usr/include/qt5/QtWidgets/qtabwidget.h \
/usr/include/qt5/QtWidgets/qtextedit.h \
/usr/include/qt5/QtWidgets/qtwidgets-config.h \
/usr/include/qt5/QtWidgets/qtwidgetsglobal.h \
/usr/include/qt5/QtWidgets/qwidget.h \
/usr/include/sched.h \
/usr/include/stdc-predef.h \
/usr/include/stdio.h \
/usr/include/stdlib.h \
/usr/include/string.h \
/usr/include/strings.h \
/usr/include/sys/cdefs.h \
/usr/include/sys/select.h \
/usr/include/sys/syscall.h \
/usr/include/sys/types.h \
/usr/include/syscall.h \
/usr/include/time.h \
/usr/include/unistd.h \
/usr/include/wchar.h \
/usr/include/wctype.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/algorithm \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/array \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/atomic \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/backward/auto_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/backward/binders.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bit \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/algorithmfwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/align.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/alloc_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/allocated_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/allocator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/atomic_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/atomic_lockfree_defines.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/atomic_wait.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/basic_ios.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/basic_ios.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/basic_string.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/basic_string.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/c++0x_warning.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/char_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/charconv.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/concept_check.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/cpp_type_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/cxxabi_forced.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/cxxabi_init_exception.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/erase_if.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/exception.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/exception_defines.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/exception_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/formatfwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/functexcept.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/functional_hash.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/hash_bytes.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/invoke.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ios_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/istream.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/iterator_concepts.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/list.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/locale_classes.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/locale_classes.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/locale_facets.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/locale_facets.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/localefwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/max_size_type.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/memory_resource.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/memoryfwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/mofunc_impl.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/monostate.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/move.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/move_only_function.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/nested_exception.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/new_allocator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/node_handle.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ostream.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ostream.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ostream_insert.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/out_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/postypes.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/predefined_ops.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ptr_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/range_access.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_algo.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_algobase.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_cmp.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_uninitialized.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/ranges_util.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/refwrap.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/requires_hosted.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/sat_arith.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_atomic.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/shared_ptr_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_abs.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_function.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/std_mutex.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_algo.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_algobase.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_bvector.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_construct.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_function.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_heap.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_iterator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_iterator_base_funcs.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_iterator_base_types.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_list.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_map.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_multimap.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_numeric.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_pair.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_raw_storage_iter.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_relops.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_tempbuf.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_tree.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_uninitialized.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stl_vector.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stream_iterator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/streambuf.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/streambuf_iterator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/string_view.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/stringfwd.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/uniform_int_dist.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/unique_ptr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/uses_allocator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/uses_allocator_args.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/utility.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/vector.tcc \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/bits/version.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cctype \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cerrno \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/charconv \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/climits \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/clocale \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/compare \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/concepts \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cstddef \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cstdint \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cstdlib \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cwchar \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/cwctype \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/debug/assertions.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/debug/debug.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/exception \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/aligned_buffer.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/alloc_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/atomicity.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/concurrence.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/numeric_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/string_conversions.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ext/type_traits.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/format \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/functional \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/future \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/initializer_list \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ios \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/iosfwd \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/iostream \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/istream \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/iterator \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/limits \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/list \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/map \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/memory \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/mutex \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/new \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/numbers \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/numeric \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/optional \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/ostream \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/pstl/execution_defs.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/pstl/glue_numeric_defs.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/stdexcept \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/streambuf \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/string \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/string_view \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/text_encoding \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/tuple \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/type_traits \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/typeinfo \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/unordered_map \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/utility \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/vector \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/atomic_word.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/c++allocator.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/c++config.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/c++locale.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/cpu_defines.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/ctype_base.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/ctype_inline.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/error_constants.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/gthr-default.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/gthr.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/g++-v15/x86_64-pc-linux-gnu/bits/os_defines.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/stdarg.h \
/usr/lib/gcc/x86_64-pc-linux-gnu/15/include/stddef.h

View File

@ -0,0 +1,3 @@
// This file is autogenerated. Changes will be overwritten.
// No files found that require moc or the moc files are included
enum some_compilers { need_more_than_nothing };

View File

@ -0,0 +1,142 @@
chat_server_autogen/timestamp: \
/home/ganome/Projects/SCAR-719/repos/scar-chat/CMakeLists.txt \
/home/ganome/Projects/SCAR-719/repos/scar-chat/build_qt/CMakeFiles/4.1.2/CMakeCXXCompiler.cmake \
/home/ganome/Projects/SCAR-719/repos/scar-chat/build_qt/CMakeFiles/4.1.2/CMakeSystem.cmake \
/home/ganome/Projects/SCAR-719/repos/scar-chat/src/server/database.cpp \
/home/ganome/Projects/SCAR-719/repos/scar-chat/src/server/database.h \
/home/ganome/Projects/SCAR-719/repos/scar-chat/src/server/server.cpp \
/usr/lib64/cmake/Qt5/Qt5Config.cmake \
/usr/lib64/cmake/Qt5/Qt5ConfigVersion.cmake \
/usr/lib64/cmake/Qt5/Qt5ModuleLocation.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfig.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfigExtras.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfigExtrasMkspecDir.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfigVersion.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreMacros.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5GuiConfig.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5GuiConfigVersion.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QComposePlatformInputContextPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QGifPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QGtk3ThemePlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QICOPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QJpegPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QLibInputPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QMinimalIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QOffscreenIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QSvgIconPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QSvgPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QWaylandEglPlatformIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QWaylandIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXcbEglIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXcbGlxIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXcbIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXdgDesktopPortalThemePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5MultimediaConfig.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5MultimediaConfigVersion.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_CameraBinServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QAlsaPlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QGstreamerAudioDecoderServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QGstreamerCaptureServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QGstreamerPlayerServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QM3uPlaylistPlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QPulseAudioPlugin.cmake \
/usr/lib64/cmake/Qt5Network/Qt5NetworkConfig.cmake \
/usr/lib64/cmake/Qt5Network/Qt5NetworkConfigVersion.cmake \
/usr/lib64/cmake/Qt5Network/Qt5Network_QGenericEnginePlugin.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsConfigExtras.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsConfigVersion.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsMacros.cmake \
/usr/share/cmake/Modules/CMakeCXXCompiler.cmake.in \
/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp \
/usr/share/cmake/Modules/CMakeCXXInformation.cmake \
/usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake \
/usr/share/cmake/Modules/CMakeCompilerIdDetection.cmake \
/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompiler.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompilerSupport.cmake \
/usr/share/cmake/Modules/CMakeDetermineSystem.cmake \
/usr/share/cmake/Modules/CMakeFindBinUtils.cmake \
/usr/share/cmake/Modules/CMakeGenericSystem.cmake \
/usr/share/cmake/Modules/CMakeInitializeConfigs.cmake \
/usr/share/cmake/Modules/CMakeLanguageInformation.cmake \
/usr/share/cmake/Modules/CMakeParseArguments.cmake \
/usr/share/cmake/Modules/CMakeParseImplicitIncludeInfo.cmake \
/usr/share/cmake/Modules/CMakeParseImplicitLinkInfo.cmake \
/usr/share/cmake/Modules/CMakeParseLibraryArchitecture.cmake \
/usr/share/cmake/Modules/CMakeSystem.cmake.in \
/usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake \
/usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake \
/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake \
/usr/share/cmake/Modules/CMakeTestCompilerCommon.cmake \
/usr/share/cmake/Modules/CMakeUnixFindMake.cmake \
/usr/share/cmake/Modules/Compiler/ADSP-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/ARMCC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/ARMClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/AppleClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Borland-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake \
/usr/share/cmake/Modules/Compiler/Clang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Clang-DetermineCompilerInternal.cmake \
/usr/share/cmake/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Cray-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/CrayClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Diab-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Embarcadero-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Fujitsu-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/GHS-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/GNU-CXX.cmake \
/usr/share/cmake/Modules/Compiler/GNU-FindBinUtils.cmake \
/usr/share/cmake/Modules/Compiler/GNU.cmake \
/usr/share/cmake/Modules/Compiler/HP-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/IAR-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake \
/usr/share/cmake/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Intel-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/MSVC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/NVHPC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/NVIDIA-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/OrangeC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/PGI-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/PathScale-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Renesas-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/SCO-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/TI-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/TIClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Tasking-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Watcom-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/XL-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/FindOpenSSL.cmake \
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake \
/usr/share/cmake/Modules/FindPackageMessage.cmake \
/usr/share/cmake/Modules/FindPkgConfig.cmake \
/usr/share/cmake/Modules/FindSQLite3.cmake \
/usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake \
/usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake \
/usr/share/cmake/Modules/Internal/CMakeDetermineLinkerId.cmake \
/usr/share/cmake/Modules/Internal/CMakeInspectCXXLinker.cmake \
/usr/share/cmake/Modules/Internal/FeatureTesting.cmake \
/usr/share/cmake/Modules/Linker/GNU-CXX.cmake \
/usr/share/cmake/Modules/Linker/GNU.cmake \
/usr/share/cmake/Modules/Platform/Linker/GNU.cmake \
/usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake \
/usr/share/cmake/Modules/Platform/Linux-Determine-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linux-GNU.cmake \
/usr/share/cmake/Modules/Platform/Linux-Initialize.cmake \
/usr/share/cmake/Modules/Platform/Linux.cmake \
/usr/share/cmake/Modules/Platform/UnixPaths.cmake \
/usr/bin/cmake

View File

@ -0,0 +1,3 @@
// This file is autogenerated. Changes will be overwritten.
// No files found that require moc or the moc files are included
enum some_compilers { need_more_than_nothing };

View File

View File

@ -0,0 +1,142 @@
dbmanager_autogen/timestamp: \
/home/ganome/Projects/SCAR-719/repos/scar-chat/CMakeLists.txt \
/home/ganome/Projects/SCAR-719/repos/scar-chat/build_qt/CMakeFiles/4.1.2/CMakeCXXCompiler.cmake \
/home/ganome/Projects/SCAR-719/repos/scar-chat/build_qt/CMakeFiles/4.1.2/CMakeSystem.cmake \
/home/ganome/Projects/SCAR-719/repos/scar-chat/src/server/database.cpp \
/home/ganome/Projects/SCAR-719/repos/scar-chat/src/server/database.h \
/home/ganome/Projects/SCAR-719/repos/scar-chat/src/server/dbmanager.cpp \
/usr/lib64/cmake/Qt5/Qt5Config.cmake \
/usr/lib64/cmake/Qt5/Qt5ConfigVersion.cmake \
/usr/lib64/cmake/Qt5/Qt5ModuleLocation.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfig.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfigExtras.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfigExtrasMkspecDir.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreConfigVersion.cmake \
/usr/lib64/cmake/Qt5Core/Qt5CoreMacros.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5GuiConfig.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5GuiConfigVersion.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QComposePlatformInputContextPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QGifPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QGtk3ThemePlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QICOPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QJpegPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QLibInputPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QMinimalIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QOffscreenIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QSvgIconPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QSvgPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QWaylandEglPlatformIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QWaylandIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXcbEglIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXcbGlxIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXcbIntegrationPlugin.cmake \
/usr/lib64/cmake/Qt5Gui/Qt5Gui_QXdgDesktopPortalThemePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5MultimediaConfig.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5MultimediaConfigVersion.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_CameraBinServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QAlsaPlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QGstreamerAudioDecoderServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QGstreamerCaptureServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QGstreamerPlayerServicePlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QM3uPlaylistPlugin.cmake \
/usr/lib64/cmake/Qt5Multimedia/Qt5Multimedia_QPulseAudioPlugin.cmake \
/usr/lib64/cmake/Qt5Network/Qt5NetworkConfig.cmake \
/usr/lib64/cmake/Qt5Network/Qt5NetworkConfigVersion.cmake \
/usr/lib64/cmake/Qt5Network/Qt5Network_QGenericEnginePlugin.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsConfigExtras.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsConfigVersion.cmake \
/usr/lib64/cmake/Qt5Widgets/Qt5WidgetsMacros.cmake \
/usr/share/cmake/Modules/CMakeCXXCompiler.cmake.in \
/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp \
/usr/share/cmake/Modules/CMakeCXXInformation.cmake \
/usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake \
/usr/share/cmake/Modules/CMakeCompilerIdDetection.cmake \
/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompiler.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake \
/usr/share/cmake/Modules/CMakeDetermineCompilerSupport.cmake \
/usr/share/cmake/Modules/CMakeDetermineSystem.cmake \
/usr/share/cmake/Modules/CMakeFindBinUtils.cmake \
/usr/share/cmake/Modules/CMakeGenericSystem.cmake \
/usr/share/cmake/Modules/CMakeInitializeConfigs.cmake \
/usr/share/cmake/Modules/CMakeLanguageInformation.cmake \
/usr/share/cmake/Modules/CMakeParseArguments.cmake \
/usr/share/cmake/Modules/CMakeParseImplicitIncludeInfo.cmake \
/usr/share/cmake/Modules/CMakeParseImplicitLinkInfo.cmake \
/usr/share/cmake/Modules/CMakeParseLibraryArchitecture.cmake \
/usr/share/cmake/Modules/CMakeSystem.cmake.in \
/usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake \
/usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake \
/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake \
/usr/share/cmake/Modules/CMakeTestCompilerCommon.cmake \
/usr/share/cmake/Modules/CMakeUnixFindMake.cmake \
/usr/share/cmake/Modules/Compiler/ADSP-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/ARMCC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/ARMClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/AppleClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Borland-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake \
/usr/share/cmake/Modules/Compiler/Clang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Clang-DetermineCompilerInternal.cmake \
/usr/share/cmake/Modules/Compiler/Compaq-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Cray-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/CrayClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Diab-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Embarcadero-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Fujitsu-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/GHS-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/GNU-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/GNU-CXX.cmake \
/usr/share/cmake/Modules/Compiler/GNU-FindBinUtils.cmake \
/usr/share/cmake/Modules/Compiler/GNU.cmake \
/usr/share/cmake/Modules/Compiler/HP-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/IAR-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/IBMCPP-CXX-DetermineVersionInternal.cmake \
/usr/share/cmake/Modules/Compiler/IBMClang-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Intel-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/LCC-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/MSVC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/NVHPC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/NVIDIA-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/OrangeC-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/PGI-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/PathScale-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Renesas-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/SCO-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/SunPro-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/TI-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/TIClang-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Tasking-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/VisualAge-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/Watcom-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/XL-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/XLClang-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/Compiler/zOS-CXX-DetermineCompiler.cmake \
/usr/share/cmake/Modules/FindOpenSSL.cmake \
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake \
/usr/share/cmake/Modules/FindPackageMessage.cmake \
/usr/share/cmake/Modules/FindPkgConfig.cmake \
/usr/share/cmake/Modules/FindSQLite3.cmake \
/usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake \
/usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake \
/usr/share/cmake/Modules/Internal/CMakeDetermineLinkerId.cmake \
/usr/share/cmake/Modules/Internal/CMakeInspectCXXLinker.cmake \
/usr/share/cmake/Modules/Internal/FeatureTesting.cmake \
/usr/share/cmake/Modules/Linker/GNU-CXX.cmake \
/usr/share/cmake/Modules/Linker/GNU.cmake \
/usr/share/cmake/Modules/Platform/Linker/GNU.cmake \
/usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake \
/usr/share/cmake/Modules/Platform/Linux-Determine-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake \
/usr/share/cmake/Modules/Platform/Linux-GNU.cmake \
/usr/share/cmake/Modules/Platform/Linux-Initialize.cmake \
/usr/share/cmake/Modules/Platform/Linux.cmake \
/usr/share/cmake/Modules/Platform/UnixPaths.cmake \
/usr/bin/cmake

View File

@ -0,0 +1,3 @@
// This file is autogenerated. Changes will be overwritten.
// No files found that require moc or the moc files are included
enum some_compilers { need_more_than_nothing };

View File

View File

@ -24,6 +24,7 @@
#include <QImage>
#include <QPixmap>
#include <QTimer>
#include <QDialog>
#include <iostream>
#include <mutex>
#include <map>
@ -69,12 +70,109 @@ private:
QLabel *m_video_label;
};
// Login dialog for authentication
class LoginDialog : public QDialog {
Q_OBJECT
public:
LoginDialog(QWidget *parent = nullptr) : QDialog(parent) {
setWindowTitle("SCAR Chat - Login");
setModal(true);
setGeometry(100, 100, 400, 300);
QVBoxLayout *layout = new QVBoxLayout(this);
// Title
QLabel *title = new QLabel("SCAR Chat", this);
title->setStyleSheet("font-size: 24px; font-weight: bold;");
title->setAlignment(Qt::AlignCenter);
layout->addWidget(title);
layout->addSpacing(20);
// Server address
QHBoxLayout *server_layout = new QHBoxLayout();
QLabel *server_label = new QLabel("Server:", this);
server_input = new QLineEdit("localhost", this);
server_layout->addWidget(server_label);
server_layout->addWidget(server_input);
layout->addLayout(server_layout);
// Server port
QHBoxLayout *port_layout = new QHBoxLayout();
QLabel *port_label = new QLabel("Port:", this);
port_input = new QLineEdit("42317", this);
port_input->setMaximumWidth(100);
port_layout->addWidget(port_label);
port_layout->addWidget(port_input);
port_layout->addStretch();
layout->addLayout(port_layout);
layout->addSpacing(15);
// Username
QHBoxLayout *user_layout = new QHBoxLayout();
QLabel *user_label = new QLabel("Username:", this);
username_input = new QLineEdit(this);
user_layout->addWidget(user_label);
user_layout->addWidget(username_input);
layout->addLayout(user_layout);
// Password
QHBoxLayout *pass_layout = new QHBoxLayout();
QLabel *pass_label = new QLabel("Password:", this);
password_input = new QLineEdit(this);
password_input->setEchoMode(QLineEdit::Password);
pass_layout->addWidget(pass_label);
pass_layout->addWidget(password_input);
layout->addLayout(pass_layout);
layout->addSpacing(15);
// Status label
status_label = new QLabel("", this);
status_label->setAlignment(Qt::AlignCenter);
status_label->setStyleSheet("color: #666;");
layout->addWidget(status_label);
// Buttons
QHBoxLayout *btn_layout = new QHBoxLayout();
login_btn = new QPushButton("Login", this);
cancel_btn = new QPushButton("Cancel", this);
btn_layout->addStretch();
btn_layout->addWidget(login_btn);
btn_layout->addWidget(cancel_btn);
layout->addLayout(btn_layout);
connect(login_btn, &QPushButton::clicked, this, &LoginDialog::accept);
connect(cancel_btn, &QPushButton::clicked, this, &LoginDialog::reject);
connect(password_input, &QLineEdit::returnPressed, this, &LoginDialog::accept);
}
QString get_server() const { return server_input->text(); }
int get_port() const { return port_input->text().toInt(); }
QString get_username() const { return username_input->text(); }
QString get_password() const { return password_input->text(); }
void set_status(const QString &msg) { status_label->setText(msg); }
void set_login_enabled(bool enabled) { login_btn->setEnabled(enabled); }
private:
QLineEdit *server_input;
QLineEdit *port_input;
QLineEdit *username_input;
QLineEdit *password_input;
QLabel *status_label;
QPushButton *login_btn;
QPushButton *cancel_btn;
};
class ChatClient : public QMainWindow {
Q_OBJECT
public:
ChatClient(QWidget *parent = nullptr) : QMainWindow(parent), m_camera(nullptr) {
setWindowTitle("SCAR Chat Client - Video Edition");
ChatClient(QWidget *parent = nullptr) : QMainWindow(parent), m_camera(nullptr), m_authenticated(false) {
setWindowTitle("SCAR Chat Client");
setGeometry(100, 100, 1000, 700);
// Create central widget with tabs
@ -83,19 +181,10 @@ public:
QVBoxLayout *main_layout = new QVBoxLayout(central);
// Connection section
QHBoxLayout *conn_layout = new QHBoxLayout();
QLabel *host_label = new QLabel("Host:", this);
host_input = new QLineEdit("localhost", this);
QLabel *port_label = new QLabel("Port:", this);
port_input = new QLineEdit("42317", this);
connect_btn = new QPushButton("Connect", this);
conn_layout->addWidget(host_label);
conn_layout->addWidget(host_input);
conn_layout->addWidget(port_label);
conn_layout->addWidget(port_input);
conn_layout->addWidget(connect_btn);
main_layout->addLayout(conn_layout);
// Status bar showing logged-in user
status_label = new QLabel("Not authenticated", this);
status_label->setStyleSheet("font-weight: bold;");
main_layout->addWidget(status_label);
// Tab widget for chat and video
QTabWidget *tabs = new QTabWidget(this);
@ -184,7 +273,6 @@ public:
main_layout->addWidget(tabs);
// Connect signals
connect(connect_btn, &QPushButton::clicked, this, &ChatClient::on_connect);
connect(send_btn, &QPushButton::clicked, this, &ChatClient::on_send_message);
connect(message_input, &QLineEdit::returnPressed, this, &ChatClient::on_send_message);
connect(bg_color_btn, &QPushButton::clicked, this, &ChatClient::on_bg_color);
@ -214,6 +302,9 @@ public:
chat_display->append("[System] SCAR Chat Client started.");
chat_display->append("[Info] Camera detection active.");
chat_display->append("[Info] Select a camera and enable it to start video capture.");
// Show login dialog
show_login_dialog();
}
~ChatClient() {
@ -224,6 +315,33 @@ public:
}
private slots:
void show_login_dialog() {
LoginDialog dialog(this);
if (dialog.exec() == QDialog::Accepted) {
QString server = dialog.get_server();
int port = dialog.get_port();
QString username = dialog.get_username();
QString password = dialog.get_password();
if (server.isEmpty() || username.isEmpty() || password.isEmpty()) {
QMessageBox::warning(this, "Error", "Please fill in all fields");
show_login_dialog();
return;
}
chat_display->append("[System] Connecting to " + server + ":" + QString::number(port) + "...");
m_current_username = username;
m_current_password = password;
m_login_dialog_server = server;
m_login_dialog_port = port;
socket->connectToHostEncrypted(server, port);
} else {
// User cancelled login
QApplication::quit();
}
}
void populate_cameras() {
camera_combo->clear();
const QList<QCameraInfo> cameras = QCameraInfo::availableCameras();
@ -328,40 +446,48 @@ private slots:
}
}
void on_connect() {
if (socket->state() == QSslSocket::ConnectedState) {
socket->disconnectFromHost();
connect_btn->setText("Connect");
return;
}
QString host = host_input->text();
int port = port_input->text().toInt();
chat_display->append("[System] Connecting to " + host + ":" + QString::number(port) + "...");
socket->connectToHostEncrypted(host, port);
}
void on_socket_connected() {
chat_display->append("[System] Connected to server!");
connect_btn->setText("Disconnect");
// Send LOGIN command
QString login_cmd = "LOGIN:" + m_current_username + ":" + m_current_password;
socket->write(login_cmd.toUtf8() + "\n");
message_input->setFocus();
}
void on_socket_disconnected() {
chat_display->append("[System] Disconnected from server");
connect_btn->setText("Connect");
if (camera_toggle->isChecked()) {
camera_toggle->setChecked(false);
}
stop_camera();
if (m_authenticated) {
QMessageBox::information(this, "Disconnected", "You have been disconnected from the server");
show_login_dialog();
}
}
void on_socket_read() {
while (socket->canReadLine()) {
QString message = QString::fromUtf8(socket->readLine()).trimmed();
if (message.startsWith("USER_CAMERA_ON:")) {
// Handle authentication response
if (message.startsWith("LOGIN_SUCCESS:")) {
QString username = message.mid(14);
m_authenticated = true;
status_label->setText("Logged in as: " + username);
chat_display->append("[System] Successfully logged in as " + username);
} else if (message.startsWith("LOGIN_FAILED:")) {
QString reason = message.mid(13);
m_authenticated = false;
chat_display->append("[System] Login failed: " + reason);
socket->disconnectFromHost();
QMessageBox::critical(this, "Login Failed", "Login failed: " + reason);
show_login_dialog();
} else if (message.startsWith("ERROR:")) {
QString error = message.mid(6);
chat_display->append("[Error] " + error);
} else if (message.startsWith("USER_CAMERA_ON:")) {
QString username = message.mid(15);
add_remote_user(username, true);
chat_display->append("[System] " + username + " enabled their camera");
@ -372,6 +498,7 @@ private slots:
} else if (message.startsWith("VIDEO_FRAME:")) {
// Placeholder for future video frame implementation
} else {
// Regular chat message
chat_display->append("[Server] " + message);
}
}
@ -452,9 +579,7 @@ private:
private:
// Chat UI
QLineEdit *host_input;
QLineEdit *port_input;
QPushButton *connect_btn;
QLabel *status_label;
QTextEdit *chat_display;
QLineEdit *message_input;
QPushButton *send_btn;
@ -478,6 +603,13 @@ private:
QSslSocket *socket;
QColor bg_color;
QColor text_color;
// Authentication
bool m_authenticated;
QString m_current_username;
QString m_current_password;
QString m_login_dialog_server;
int m_login_dialog_port;
};
int main(int argc, char *argv[]) {

View File

@ -5,6 +5,10 @@
#include <memory>
#include <cstring>
#include <algorithm>
#include <chrono>
#include <iomanip>
#include <sstream>
#include <map>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <sys/socket.h>
@ -12,6 +16,7 @@
#include <arpa/inet.h>
#include <unistd.h>
#include <signal.h>
#include "database.h"
#define PORT 42317
#define MAX_CLIENTS 100
@ -21,7 +26,10 @@
SSL_CTX *ctx = nullptr;
std::vector<SSL*> client_sockets;
std::mutex clients_mutex;
std::map<SSL*, std::string> client_nicknames; // Track client nicknames
std::mutex nicknames_mutex;
bool server_running = true;
Database* global_db = nullptr;
void handle_sigint(int sig) {
(void)sig; // Unused parameter
@ -63,16 +71,61 @@ bool load_certificates(const char *cert_file, const char *key_file) {
void broadcast_message(const std::string &message, SSL *sender) {
std::lock_guard<std::mutex> lock(clients_mutex);
std::cout << "Broadcasting to " << client_sockets.size() << " clients (excluding sender): " << message;
for (SSL *client : client_sockets) {
if (client != sender) {
SSL_write(client, message.c_str(), message.length());
int bytes_written = SSL_write(client, message.c_str(), message.length());
if (bytes_written <= 0) {
std::cerr << "Failed to write to client: " << SSL_get_error(client, bytes_written) << std::endl;
} else {
std::cout << " -> Sent " << bytes_written << " bytes to client" << std::endl;
}
}
}
}
std::string get_timestamp() {
auto now = std::chrono::system_clock::now();
auto time = std::chrono::system_clock::to_time_t(now);
std::stringstream ss;
ss << std::put_time(std::localtime(&time), "%H:%M:%S");
return ss.str();
}
// Trim whitespace from both ends of string
std::string trim_string(const std::string &str) {
size_t start = str.find_first_not_of(" \t\r\n");
if (start == std::string::npos) return "";
size_t end = str.find_last_not_of(" \t\r\n");
return str.substr(start, end - start + 1);
}
// Parse message format: LOGIN:username:password or regular message
bool parse_login(const std::string &msg, std::string &username, std::string &password) {
std::string trimmed = trim_string(msg);
if (trimmed.substr(0, 6) != "LOGIN:") {
return false;
}
size_t first_colon = 6;
size_t second_colon = trimmed.find(':', first_colon);
if (second_colon == std::string::npos) {
return false;
}
username = trim_string(trimmed.substr(first_colon, second_colon - first_colon));
password = trim_string(trimmed.substr(second_colon + 1));
return !username.empty() && !password.empty();
}
void handle_client(SSL *ssl, int client_socket) {
char buffer[BUFFER_SIZE];
int bytes;
std::string nickname;
bool authenticated = false;
std::cout << "Client connected (FD: " << client_socket << ")" << std::endl;
@ -80,19 +133,52 @@ void handle_client(SSL *ssl, int client_socket) {
buffer[bytes] = '\0';
std::string msg_str(buffer);
// Handle LOGIN message
std::string username, password;
if (parse_login(msg_str, username, password)) {
if (global_db && global_db->authenticate_user(username, password)) {
nickname = username;
authenticated = true;
{
std::lock_guard<std::mutex> lock(nicknames_mutex);
client_nicknames[ssl] = nickname;
}
std::string response = "LOGIN_SUCCESS:" + nickname + "\n";
SSL_write(ssl, response.c_str(), response.length());
std::cout << "User authenticated: " << nickname << " (FD: " << client_socket << ")" << std::endl;
continue;
} else {
std::string response = "LOGIN_FAILED:Invalid credentials\n";
SSL_write(ssl, response.c_str(), response.length());
std::cout << "Authentication failed for user: " << username << std::endl;
continue;
}
}
// Reject messages from unauthenticated clients
if (!authenticated) {
std::string response = "ERROR:Not authenticated. Send LOGIN:username:password\n";
SSL_write(ssl, response.c_str(), response.length());
continue;
}
// Handle camera status messages
if (msg_str.find("CAMERA_ENABLE") != std::string::npos) {
std::cout << "User enabled camera" << std::endl;
std::string broadcast_msg = "USER_CAMERA_ON: User" + std::to_string(client_socket) + "\n";
std::cout << "User " << nickname << " enabled camera" << std::endl;
std::string timestamp = get_timestamp();
std::string broadcast_msg = "*{" + timestamp + "}* " + nickname + ": Camera Enabled\n";
broadcast_message(broadcast_msg, ssl);
} else if (msg_str.find("CAMERA_DISABLE") != std::string::npos) {
std::cout << "User disabled camera" << std::endl;
std::string broadcast_msg = "USER_CAMERA_OFF: User" + std::to_string(client_socket) + "\n";
std::cout << "User " << nickname << " disabled camera" << std::endl;
std::string timestamp = get_timestamp();
std::string broadcast_msg = "*{" + timestamp + "}* " + nickname + ": Camera Disabled\n";
broadcast_message(broadcast_msg, ssl);
} else {
// Regular chat message
std::cout << "Received: " << buffer << std::endl;
broadcast_message(msg_str, ssl);
// Regular chat message - format with timestamp and nickname
std::string timestamp = get_timestamp();
std::string formatted_msg = "*{" + timestamp + "}* " + nickname + ": " + msg_str + "\n";
std::cout << "Received: " << formatted_msg;
broadcast_message(formatted_msg, ssl);
}
}
@ -104,9 +190,18 @@ void handle_client(SSL *ssl, int client_socket) {
}
}
{
std::lock_guard<std::mutex> lock(nicknames_mutex);
auto it = client_nicknames.find(ssl);
if (it != client_nicknames.end()) {
std::cout << "User disconnected: " << it->second << std::endl;
client_nicknames.erase(it);
}
}
SSL_free(ssl);
close(client_socket);
std::cout << "Client disconnected" << std::endl;
std::cout << "Client disconnected (FD: " << client_socket << ")" << std::endl;
}
int main(int argc, char *argv[]) {
@ -118,6 +213,20 @@ int main(int argc, char *argv[]) {
signal(SIGINT, handle_sigint);
// Initialize database - use path relative to project root
std::string db_path = "scar_chat.db";
// If running from build directory, look in parent directory
if (access(db_path.c_str(), F_OK) == -1 && access("../scar_chat.db", F_OK) == 0) {
db_path = "../scar_chat.db";
}
global_db = new Database(db_path);
if (!global_db->initialize()) {
std::cerr << "Failed to initialize database" << std::endl;
delete global_db;
return 1;
}
init_openssl();
if (!load_certificates(argv[1], argv[2])) {
@ -198,6 +307,10 @@ int main(int argc, char *argv[]) {
close(server_fd);
cleanup_openssl();
if (global_db) {
global_db->close();
delete global_db;
}
std::cout << "Server shutdown complete" << std::endl;
return 0;